la plupart (mais je connais seulement un petit nombre, il suffit de ne pas être difficile sur ce point) Langues de haut niveau Prenez en charge plusieurs opérateurs d'affectation différents.
x &&= testA(); // perform test A/B/C/D stop on first failure. x &&= testB(); x &&= testC(); x &&= testD();
5 Réponses :
Quand auriez-vous jamais besoin de cela? Généralement, lorsque vous effectuez des opérations booléennes, vous ne mettez pas à jour les valeurs, mais vous informez plutôt quelque chose pour une opération unique. Votre exemple n'est pas très réaliste; Il n'y a pas beaucoup de cas dans lesquels vous le feriez vraiment. P>
En outre, dans toutes les langues que je peux penser à la mission augmentée n'existe que pour les opérations biteux et arithmétiques, jamais booléen opérations. P>
C'est très pratique lorsque le côté gauche n'est pas booléen, mais a la vérité i>.
Perl soutient cela. Il est très pratique de pouvoir écrire:
Je pensais que Perl soutient chaque combinaison possible de chaque opérateur et de tout le reste du monde?
La première raison est que les langues vous permettent d'atteindre votre objectif en utilisant le formulaire "Verbose". Après cela, il est fronçalisé lors de l'ajout d'opérateurs pour chaque cas inhabituel. Une partie de la raison est que le concepteur de langue doit décider des précéditions de l'opérateur judicieusement. Ce n'est pas aussi simple qu'il ressemble - prenez C comme exemple qui gêne des précéditions intuitives sur La deuxième raison est que la plupart des langues modernes soutiennent une forme d'exception. Votre cas peut être facilement réécrit en utilisant des exceptions avec le bonus ajouté, que des informations sur la défaillance peuvent être transmises plus facilement à l'appelant. P>
Par conséquent, le besoin d'opérateur spécial comme celui-ci est assez petit. P>
Oh, j'ai failli manqué la raison la plus importante: c ne les a pas. Ce que cela signifie est décrit mieux dans bref, incomplet et surtout une mauvaise histoire des langages de programmation : p>
1970 - Niklaus Wirth crée Pascal, une langue procédurale. Critiques
dénoncer immédiatement Pascal car il utilise la syntaxe "x: x + y"
au lieu de plus familier C-like "x = x + y". Cette critique
arrive malgré le fait que c n'a pas encore été inventé. P>
1972 - Dennis Ritchie invente un pistolet puissant qui tire vers l'avant
et en arrière simultanément. Non satisfait du nombre de décès
et muimings permanents de cette invention, il invente C et UNIX. P>
blockQuote>
Cela montre simplement que c est toujours un attracteur que vous ne pouvez pas échapper. p> & code>,
| code>,
&& code> et
|| code>. p>
Je ne comprends toujours pas pourquoi il y a un "essentiellement faux" dans ce titre. : P
&& code> et
|| code> sont spéciaux dans le sens où ils sont, dans la plupart des langues, les seules constructions qui fournissent une évaluation courte de circuits afin que cela ait un peu de sens pour eux être traité différemment des opérateurs normaux, non court-circuit, en ce qui concerne les formes abrégées. Le moyen le plus simple d'éviter la confusion de
&& = code> court-circuit ou non ne comprend pas en premier lieu. P>
Contrairement à + = et amis, && = ne correspond pas à une seule instruction matérielle. C'est une sorte de test ou clair. P>
J'avais exactement i> cette pensée aujourd'hui, car à Lua,
&& code> est le mot
et code>, donc je me suis demandé comment ils avaient fait
&& = < / Code> et réalisa qu'il n'y a pas de
&& = code>, en Lua ou dans la plupart des langues.