Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AFFECTATION D'UNE VARIABLE LORS DE LA DÉCLARATION


Information sur la source

Catégorie :Trucs & Astuces Classé sous : affectation, déclaration, variable Niveau : Débutant Date de création : 26/03/2003 Date de mise à jour : 05/06/2007 17:29:43 Vu : 2 883

Note :
8 / 10 - par 3 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

J'ai vu certains codes où les programmeurs veulent affecter une valeur à plusieurs variables en une seule ligne. L'affectation n'est pas correcte.
 

Source

  • Je m explique...
  • J ai vu, par exemple, au démarrage d un programme : A = B = C = 1
  • Où A, B et C sont trois variables numériques (Integer, Long, etc...).
  • La personne veut donc affecter la valeur 1 aux variables A, B et C.
  • Mais en résultat toutes les variables seront égales à 0. Pourquoi ?
  • Pour commencer, il faut savoir que toutes les variables numériques
  • sont par défaut égales à 0 au début d un programme.
  • La ligne A = B = C = 1 n affecte une valeur qu a la variable A, non
  • pas à B, ni à C.
  • Car quand vous voulez affecter une valeur à une variable, TOUTE
  • EXPRESSION QUI SUIT LE PREMIER SIGNE "=" sera le calcul de la valeur.
  • Donc :
  • A = B = C = 1 nous donne A = Expression( B = C = 1 )
  • L expression B = C = 1 est en fait une vérification, ou une
  • comparaison.
  • En plus clair, ça donnerait (parce qu une opération se fait
  • généralement de gauche à droite avec les mêmes opérateurs) :
  • ( B = C ) = 1
  • Ce qu il faut aussi savoir, c est que les valeurs booléennes
  • (Boolean) VRAI et FAUX (TRUE et FALSE), utilisées dans les
  • comparaisons, peuvent aussi avoir une valeur numérique qui sont
  • -1 pour TRUE, et 0 pour FALSE.
  • On fait la vérification... Au démarrage du programme, A, B et C sont
  • égaux à 0 comme je l ai dit au début.
  • B = C ? --> 0 = 0 ? --> TRUE
  • Donc on enlève "( B = C )" de l expression.
  • ( B = C ) = 1 --> ( TRUE ) = 1
  • Etant donné que la prochaine comparaison se fait entre une valeur
  • booléenne et un chiffre, la valeur TRUE est convertie en chiffre,
  • donc -1
  • -1 = 1 ? --> FALSE
  • FALSE est le résultat de l expression. On peut maintenant revenir à
  • la ligne complète :
  • A = B = C = 1 --> A = ( B = C ) = 1 --> A = ( 0 = 0 ) = 1
  • A = TRUE = 1 --> A = ( TRUE = 1 ) --> A = ( -1 = 1 )
  • A = FALSE --> A = 0
  • On affecte donc la valeur 0 à A, et les variables B et C ne changent
  • pas. Voilà.
Je m explique...

J ai vu, par exemple, au démarrage d un programme : A = B = C = 1
Où A, B et C sont trois variables numériques (Integer, Long, etc...).

La personne veut donc affecter la valeur 1 aux variables A, B et C.
Mais en résultat toutes les variables seront égales à 0. Pourquoi ?

Pour commencer, il faut savoir que toutes les variables numériques
sont par défaut égales à 0 au début d un programme.

La ligne A = B = C = 1 n affecte une valeur qu a la variable A, non
pas à B, ni à C.
Car quand vous voulez affecter une valeur à une variable, TOUTE
EXPRESSION QUI SUIT LE PREMIER SIGNE "=" sera le calcul de la valeur.
Donc :

A = B = C = 1   nous donne   A = Expression( B = C = 1 )

L expression B = C = 1 est en fait une vérification, ou une
comparaison.
En plus clair, ça donnerait (parce qu une opération se fait
généralement de gauche à droite avec les mêmes opérateurs) :

( B = C ) = 1

Ce qu il faut aussi savoir, c est que les valeurs booléennes
(Boolean) VRAI et FAUX (TRUE et FALSE), utilisées dans les
comparaisons, peuvent aussi avoir une valeur numérique qui sont
-1 pour TRUE, et 0 pour FALSE.

On fait la vérification... Au démarrage du programme, A, B et C sont
égaux à 0 comme je l ai dit au début.

B = C ?  -->  0 = 0 ?  -->  TRUE

Donc on enlève "( B = C )" de l expression.

( B = C ) = 1  -->  ( TRUE ) = 1

Etant donné que la prochaine comparaison se fait entre une valeur
booléenne et un chiffre, la valeur TRUE est convertie en chiffre,
donc -1

-1 = 1 ?  -->  FALSE

FALSE est le résultat de l expression. On peut maintenant revenir à
la ligne complète :

A = B = C = 1  -->  A = ( B = C ) = 1  -->  A = ( 0 = 0 ) = 1
A = TRUE = 1  -->  A = ( TRUE = 1 )  -->  A = ( -1 = 1 )
A = FALSE  -->  A = 0

On affecte donc la valeur 0 à A, et les variables B et C ne changent
pas. Voilà.

Conclusion

Je sais pas si j'ai été clair pour ceux qui ne connaiss(ai)ent pas ça. Dans le cas contraire, postez vos questions.
 

Historique

05 juin 2007 17:29:45 :
Arrangement du texte.

Commentaires et avis

signaler à un administrateur
Commentaire de msohet le 26/03/2003 09:53:36

bien vu

signaler à un administrateur
Commentaire de Proger le 26/03/2003 11:39:00

A = B = C = 1
mais aussi A = B > C
ou encore A = B > C And D < C
bref, tout cela sert a plaçer dans une variable le résultats d'opérations booléenne, qui sont des opérations mathématique aussi importante en prog que les additions et soustraction.
Cela devient interessant de faire un
A = B = C
do
...
if a then
...
loop

qui sera plus rapide que
do
...
if B = C then
...
loop

mauvais exemple, mais l'idée est là.

signaler à un administrateur
Commentaire de Jujufouq le 09/04/2003 21:40:46

Là, par contre, c'est une source intéressante.

signaler à un administrateur
Commentaire de ABF le 04/06/2007 17:02:47

SAlut, comment peut t'on définir un tableau d'entier

par défaut il est initialisé à 0, comment lui dire de s'initialiser à 3 ?
le tableau vide (20,5) : toutes les "cases" seront à 0 mais si on souhaites les déclarer à 3 est t'on obliger defaire une boucle et de tout mettre à 3 ? (très long pour un gros tableau !!)

Merci

++

signaler à un administrateur
Commentaire de Proger le 05/06/2007 12:43:47

Oui, la grosse boucle est la seule "bonne" solution. Quand ton programme est compilé, c'est rapide. Surtout si tu n'as qu'une dimension.

Cependant tu peux aussi utiliser l'API RtlFillMemory si vraiment la boucle te dérange (ou que tu as plusieurs dimensions à ton tableau), mais ca rempli tous les octets (byte) sans distinction integer ou long.

Une dernière astuce si ton tableau est vraiment de grande taille, tu crées une ligne avec des 3, et tu utilises l'API RtlCopyMemory pour le copier à chaque "colonne"...
Cependant j'insiste qu'une fois compilé, c'est la boucle "mano" qui sera le plus rapide.

signaler à un administrateur
Commentaire de ABF le 06/06/2007 10:29:53

SAlut et Merci Proger

C'est méthode "mano" que j'ai employée !

++

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Déclaration de variable : HELP !!!!!!!!!!!!!! [ par Duke76 ] Salut , Mon probleme est simple :Comment déclarer des variables qui seront utilisables dans TOUS les modules , TOUTES les feuilles , TOUTES les procéd lecture et decomposition de données depuis un fichier sequentiel [ par happex ] Bonjour, cela fait quelques temps que je galère sur un programme simple dans le principe et ça m'énerve. Voici donc mon problème, je voudrais lire un Déclaration de variable [ par JeanFrancis68 ] Bonjour à tous...Y'a t-il possibilité de déclarer des variables de manières conditionnelles??? Ex : Si X = 1 alors déclaration d'une chaine Déclaration de variable [ par pierre4064 ] C'est surement une question bète mais je n'arrive pas a trouver comment déclarer une variable de manière a ce qu'elle soit accessible depuis d'autres affectation d'un champs de valeurs [ par damd ] salut a tousj'aurai aime savoir comment affecter a une variable (texte, constant) un champs de valeur, pour dire que cette variable peut prendre soit déclaration de type tableau de tableaux... [ par mahana ] Est-il possible de créer sous visual basic 6.0 un type de variable taableau contenant lui-même des tableaux..ex: type1 = tableau de 15 élémentset type déclaration de variable [ par alfarabi ] alfacomment faire en sorte qu'une variable soit prise en compte dans plusieurs MDIchildmerci Déclaration de Variable [ par scoubi7 ] Bonjour,J'ai un module appellant un UserForm, qui quand on clic ou sur :-un bouton A se unload et poursuit le 1er module,-un bouton B se unload et act déclaration d une variable de type Form1.CurrentY = 7080 [ par Teclis01 ] Form1.CurrentY = 7080                     'on chan affectation d'une date dans une variable [ par oxram ] Bonsoir je ne comprend pas comment affecter une date dans une variable j'ai essayé de la maniere suivante mais ça ne marche pas dim dteMax&n


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,34 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.