Affectation d'une variable lors de la déclaration

Contenu du snippet

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 / Exemple :


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.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.