Pourquoi voudriez-vous d'utiliser une assignation dans une condition?
Dans de nombreuses langues, les affectations sont légales dans les 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) {
...
}
- Cette question est vraiment indépendant de la langue? Les langues qui sont touchés par cette? Je sais que le C et le C++ sont, quoi d'autre?
Vous devez vous connecter pour publier un commentaire.
C'est plus utile pour les boucles que si des instructions.
Qui autrement auraient du être écrit
while(item = stream.read()) { ... }
Il est plus utile si vous êtes l'appel d'une fonction:
Bien sûr, vous pouvez simplement mettre les n = foo(); sur une déclaration séparée, alors si (n), mais je pense que le ci-dessus est assez lisible idiome.
Je le trouve très utile dans les chaînes d'actions qui impliquent souvent de détection d'erreur, etc.
L'alternative (et non à l'aide de la cession en l'état) est:
Sur une longue vérification des erreurs, l'alternative peut fonctionner sur le membre de droite de la page tandis que la mission-dans-à condition que la version ne le fait pas.
Les contrôles d'erreur peut également être "actions"—
first_action()
,second_action()
,third_action()
— bien sûr, plutôt que de simplement les contrôles. Qui est, ils pourraient être vérifiées par étapes dans le processus que la fonction est la gestion. (Le plus souvent dans le code que je travaille avec, les fonctions sont le long des lignes de pré-contrôles des conditions, ou de l'allocation mémoire nécessaire pour la fonction de travail, ou similaire).Il peut être utile si vous appelez une fonction qui retourne des données pour des travaux ou un drapeau pour indiquer une erreur (ou que vous avez terminé).
Quelque chose comme:
Personnellement c'est un langage que je ne suis pas très friand, mais parfois, l'alternative est la plus laide.
GCC peut vous aider à détecter (avec un Mur) si vous accidentellement essayez d'utiliser une affectation en tant que valeur de vérité, dans le cas où il recommande de vous écrire
I. e. utiliser des parenthèses pour indiquer que c'est vraiment ce que vous voulez.
L'idiome est plus utile lorsque vous écrivez un
while
boucle au lieu d'unif
déclaration. Pour unif
déclaration, vous pouvez le diviser comme vous le décrivez. Mais sans cette construction, il faudrait répéter:ou l'utilisation d'une boucle-et-un-demi-structure:
Je préfère habituellement la boucle-et-un-moitié formulaire.
while
boucle, préférez l'utilisation de:do { c = getchar(); ... } while (c != EOF);
for
boucles peuvent être utilisés à la place:for (char c = getchar(); c != EOF; c= getchar()) { /* do something with c */ }
-- c'est la plus concise, etfor
toujours dit "en boucle" pour moi, du point de vue stylistique. Petit inconvénient est que vous devez spécifier la fonction de retourc
deux fois.La réponse courte est que Expression orientée langages de programmation permettent plus succincte code. Ils ne vous force pas à séparer les commandes à partir de requêtes.
En PHP, par exemple, c'est utile pour faire une boucle à travers la base de données SQL résultats:
C'est beaucoup mieux que d':
L'autre avantage vient lors de l'utilisation de gdb.
Dans le code suivant le code d'erreur n'est pas connu si nous étions à une seule étape.
Plutôt
Maintenant, lors de l'étape que l'on peut savoir ce qu'était le code d'erreur retourné à partir de la checkstatus().
La raison en est :
L'amélioration de la Performance (Parfois)
Moindre Code (Toujours)
Prendre un exemple: Il y a une méthode
someMethod()
et dans unif
la condition que vous voulez vérifier si la valeur de retour de la méthode estnull
. Si vous allez utiliser la valeur de retour de nouveau.Il va entraver la performance depuis que vous appelez la même méthode à deux reprises. Au lieu d'utilisation: