Dans de nombreuses langues, les missions sont légales dans certaines conditions. Je n'ai jamais compris la raison derrière cela. Pourquoi voudriez-vous écrire:
if (var1 = var2) {
...
}
au lieu de:
var1 = var2;
if (var1) {
...
}
Dans de nombreuses langues, les missions sont légales dans certaines conditions. Je n'ai jamais compris la raison derrière cela. Pourquoi voudriez-vous écrire:
if (var1 = var2) {
...
}
au lieu de:
var1 = var2;
if (var1) {
...
}
Je trouve cela plus utile dans les chaînes d'actions qui impliquent souvent la détection d'erreur, etc.
if ((rc = first_check(arg1, arg2)) != 0)
{
report error based on rc
}
else if ((rc = second_check(arg2, arg3)) != 0)
{
report error based on new rc
}
else if ((rc = third_check(arg3, arg4)) != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
L'alternative (ne pas utiliser l'affectation dans la condition) est la suivante:
rc = first_check(arg1, arg2);
if (rc != 0)
{
report error based on rc
}
else
{
rc = second_check(arg2, arg3);
if (rc != 0)
{
report error based on new rc
}
else
{
rc = third_check(arg3, arg4);
if (rc != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
}
}
Avec une vérification d'erreur prolongée, l'alternative peut s'exécuter à partir de la RHS de la page alors que la version en affectation conditionnelle ne le fait pas.
C'est plus utile si vous appelez une fonction:
if (n = foo())
{
/* foo returned a non-zero value, do something with the return value */
} else {
/* foo returned zero, do something else */
}
Bien sûr, vous pouvez simplement mettre le n = foo (); sur une déclaration séparée puis si (n), mais je pense que ce qui précède est un idiome assez lisible.
Cela peut être utile si vous appelez une fonction qui renvoie des données à utiliser ou un indicateur pour indiquer une erreur (ou que vous avez terminé).
Quelque chose comme:
while ((c = getchar()) != EOF) {
// process the character
}
// end of file reached...
Personnellement, c'est un idiome que je n'aime pas énormément, mais parfois l'alternative est plus laide.
L'idiome est plus utile lorsque vous écrivez une boucle while
au lieu d'une instruction if
. Pour une déclaration if
, vous pouvez la décomposer comme vous le décrivez. Mais sans cette construction, vous devriez soit vous répéter:
c = getchar();
while (c != EOF) {
// ...
c = getchar();
}
ou utilisez une structure en boucle et demi:
while (true) {
c = getchar();
if (c == EOF) break;
// ...
}
Je préférerais généralement la forme en boucle et demie.
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.