juste une question rapide Il existe deux types d'évaluation différents. Est-ce que chacun a un nom? P> Edit: Je suis intéressé de savoir comment cette évaluation PERL est communément appelée par rapport à C. Lorsque vous dites "C Exemple est X et Perl exemple n'est pas x, Mais Y "Quels mots utiliseriez-vous pour X et Y." Court Circuit "n'est pas ce que je cherche. p> p>
6 Réponses :
en Perl, in c le résultat de 99 || 44 code> renvoie
99 code>, car
|| code> est "court-circuit" et si son premier argument est vrai dans le contexte booléen, il le renvoie simplement.
impression code> impression 99. p>
|| code> est logique, qui passe à
printf code> sur 1 ou 0. Il est également court-circuit, donc 44 n'est pas même pas évalué. p>
C's || est aussi court-circuiter. Il évalue juste à 1 ou zéro.
lire ici . P>
binaire || Effectue un court-circuit fort> logique ou opération. C'est-à-dire que si l'opérande gauche est vrai, le bon opérande n'est même pas évalué. Le contexte scalaire ou de liste se propage au bon opéron s'il est évalué. P>
à Perl le || et && les opérateurs diffèrent de C dans cela, plutôt que de rentrer 0 ou 1, ils renvoient la dernière valeur évaluée. P> blockQuote>
printf ("% d", 99 || 44) imprime "1" en C P> blockQuote>
c'est-à-dire parce que
99 || 44 code> renvoie true (seulement 99 (non nulle) est évalué en raison de l'action de court-circuit de
|| code>) dont équivalent est
1 code> d'où
printf () code> impression
1 code>. p>
Imprimer 99 || 44 impressions "99" à Perl p> blockQuote>
.. Plutôt que de retourner 0 ou 1, la dernière valeur évaluée (
99 code> ici) est renvoyée. p>
@SthereOfrogen: Votre question était Y a-t-il un terme B> pour ces deux types d'évaluation? I> .MY Réponse est une évaluation de court-circuit. Cela ne répond pas à votre question? BTW QUIERVOI TOUTÉ AVOIDÉE, s'il vous plaît expliquer la raison?
STEREOFROG: Regardez à nouveau, répondit-il, la différence est un détail de mise en œuvre. C retourne 1 pour "vrai", tandis que Perl renvoie la dernière valeur non nulle qu'elle évalue pour "vrai".
la version C utilise || comme la logique ou entre les deux valeurs. Les 44 et 99 évaluent à EDIT: Merci Evan pour la clafination: le || L'opérateur de Perl n'est pas l'opérateur null-coalescent, il renvoie le RHS si le LHS s'évalue sur FAUX, d'autres sages retournant le LHS. Voici la liste des valeurs dans Perl qui évaluent à FALSE ( de wikipedia) p> true code> en C car ils ne sont pas
0 code>, donc le résultat d'un ou entre eux retourne
1 code> (AKA
vrai code> en c)
dans cet extrait de perl particulier, || est le Opérateur NULL-COALESCING , un binaire qui évalue au deuxième argument si le premier est null , sinon évaluer au premier argument. Étant donné que 99 code> est le premier argument et non null, il est retourné et imprimé. S> p>
// code> est le "bon" opérateur null-coalescent. p>
Re: dans cet extrait de perl particulier, || est l'opérateur null-coalescent, un binaire qui évalue au deuxième argument si le premier est NULL i> - il est certainement pas b> null-coalescent. Oui, Undef || mourir code> mourra, mais donc
0 || Die code>.
|| code> évalue le LHS et s'il renvoie false il évalue le RHS. Underef vient de même évaluer à faux (Dieu merci). Inversement,
// code> est l'opérateur null-coalescent introduit en 5.10 que i> ne déclenche que le RHS si le LHS est nul, avant que vous puissiez faire
(défini $ a) || Die code>
le || opérateur à Perl n'est pas l'opérateur null-coalescent, il renvoie le LHS si le premier évalue à Faux, d'autres sages retournant le premier argument. I> En fait, comme toutes les déclarations de Perl renvoient sa dernière expression évaluée qui est toujours la dernière expression évaluée qui est toujours la Dernier argument avec || code>. Découvrez ce
perl -e'print 0 || "0" || Undef ' code> à voir.
C et Perl se réfèrent à leur || code> des opérateurs "logiques ou" (comme distincts d'un bit-sage ou). Il n'y a pas de nom spécial pour le comportement de Perl de retourner la dernière valeur par opposition à 0 ou 1. P>
Comme vous le souhaitez, les mots que vous recherchez sont pas em> "court-circuit". L'évaluation de court-circuit signifie que dans l'expression si expression Je suis au courant de la distinction que vous faites dans deux saveurs différentes de court-circuit ou em>, mais en vingt ans de travail dans Langues de programmation Je n'ai jamais vu ces choses nommées. La version Perl est assez populaire dans les langages dynamiques, par exemple, icône, lua, schéma. P> la version Perl est presque em> expresssible en C: p> Malheureusement, cette version peut évaluer Le comportement C peut être émulé dans Perl par P > E1 code> est évaluée à quelque chose représentant la vérité, il n'est pas nécessaire d'évaluer
E2 code>. CE et Perl utilisent l'évaluation de court-circuit. P>
E1 code> deux fois, en fonction de l'optimiseur-et si
E1 code> a des effets secondaires ou si le compilateur ne peut pas dire s'il peut-être em> avoir des effets secondaires, alors le compilateur est requis em> pour l'évaluer deux fois. Ce défaut peut être corrigé en liant la valeur de
E1 code> à une variable locale fraîche, mais qui nécessite une extension GNU. P>
!!(e1 || e2)
en C, || code> est une opération
S> de type-agnostique forte> qui traite le premier argument en tant que valeur booléenne. C'est la seule distinction. P>
Bien sûr, il s'agit d'une opération entière dans Perl? Qu'en est-il de $ s = "bonjour" || "" code>?
@frunsi: lol, je ne sais pas la terminologie de type de Perl.
Un terme commun pour deux opérations ayant des effets différents? N'est-ce pas comme demander s'il y a un terme commun pour les pommes et les oranges? Semble un peu contradictoire.
@Jalf: il demande un terme commun pour ces deux types d'évaluation b> i> i>, ne devrait-il pas être "une évaluation de court-circuit"?
Je ne suis pas sûr. Est-ce que l'évaluation du court-circuit est-elle le trait qui vous intéresse? Il pourrait aussi bien être "logique ou", ou "conversion int-to-bool". Les deux lignes de code ont beaucoup en commun, mais il existe également des différences majeures. Je ne suis pas vraiment sûr de ce que l'OP veut un terme commun pour i>
Du titre, je suppose que vous recherchez un nom pour le deuxième type de || Pour le distinguer de la première, mais du corps de votre question, je suppose que vous voulez un nom commun qui englobe les deux. Lequel est-ce? Et pouvez-vous modifier le titre ou le corps pour le rendre plus clair ce que vous demandez?
Comment peut-il être «langue-agnostic», «C», 'C ++' et 'Perl'?
"Fruit" couvre également les bananes et les pêches.
@stereOfrogen: Changer le sujet - Un allemand se traduit généralement "commun" à "Üblich", qui est utilisé de mauvaise manière, cela signifie ici "gemeinsam" !! Vous voulez utiliser "typique" au lieu de "commun"