116 votes

Attribuer une valeur à une variable dans une instruction if

Je me demandais s'il était possible d'attribuer une valeur à une variable à l'intérieur d'un opérateur conditionnel, de la manière suivante :

if((int v = someMethod()) != 0) return v;

Existe-t-il un moyen de faire cela en Java ? Car je sais que c'est possible en while mais je ne sais pas si je m'y prends mal pour l'instruction if ou si ce n'est tout simplement pas possible.

198voto

Parth Points 2777

Les variables peuvent être assignées mais pas déclarées à l'intérieur de l'instruction conditionnelle :

int v;
if((v = someMethod()) != 0) return true;

28voto

Bohemian Points 134107

Vous pouvez attribuer mais pas déclarer à l'intérieur d'un if :

Essayez ça :

int v; // separate declaration
if((v = someMethod()) != 0) return true;

21voto

rmalchow Points 1688

Une affectation renvoie le côté gauche de l'affectation. donc : oui. c'est possible. cependant, vous devez déclarer la variable à l'extérieur :

int v = 1;
if((v = someMethod()) != 0) {
    System.err.println(v);
}

8voto

Achintya Jha Points 7108

Oui, vous pouvez assigner la valeur d'une variable à l'intérieur de if.

Je ne le recommanderais pas. Le problème est que cela ressemble à une erreur courante où l'on essaie de comparer des valeurs, mais où l'on utilise un simple = au lieu de == o === .

Ce sera mieux si vous faites quelque chose comme ça :

int v;
if((v = someMethod()) != 0) 
   return true;

2voto

rlinden Points 1278

Je pense que votre problème est dû au fait que vous définissez la variable v à l'intérieur du test. Comme expliqué par @rmalchow, cela fonctionnera si vous la changez en

int v;
if((v = someMethod()) != 0) return true;

Il y a aussi une autre question de portée variable. Même si ce que vous avez essayé fonctionnait, quel serait l'intérêt ? En supposant que vous puissiez définir la portée de la variable dans le test, votre variable v n'existerait pas en dehors de cette portée. Par conséquent, la création de la variable et l'attribution de la valeur seraient inutiles, car vous ne pourriez pas l'utiliser.

Les variables n'existent que dans la portée dans laquelle elles ont été créées. Puisque vous attribuez la valeur pour l'utiliser par la suite, tenez compte de la portée dans laquelle vous créez la variable afin qu'elle puisse être utilisée en cas de besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X