6
votes

Terme courant pour la "valeur basée sur la valeur" ou l'opérateur

juste une question rapide xxx

Il existe deux types d'évaluation différents. Est-ce que chacun a un nom?

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.


7 commentaires

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 , 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


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"


6 Réponses :


3
votes

en Perl, 99 || 44 renvoie 99 , car || est "court-circuit" et si son premier argument est vrai dans le contexte booléen, il le renvoie simplement. impression impression 99.

in c le résultat de || est logique, qui passe à printf sur 1 ou 0. Il est également court-circuit, donc 44 n'est pas même pas évalué.


1 commentaires

C's || est aussi court-circuiter. Il évalue juste à 1 ou zéro.



8
votes

lire ici .

binaire || Effectue un court-circuit 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é.

à 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.

printf ("% d", 99 || 44) imprime "1" en C

c'est-à-dire parce que 99 || 44 renvoie true (seulement 99 (non nulle) est évalué en raison de l'action de court-circuit de || ) dont équivalent est 1 d'où printf () impression 1 .

Imprimer 99 || 44 impressions "99" à Perl

.. Plutôt que de retourner 0 ou 1, la dernière valeur évaluée ( 99 ici) est renvoyée.


2 commentaires

@SthereOfrogen: Votre question était Y a-t-il un terme pour ces deux types d'évaluation? .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".



6
votes

la version C utilise || comme la logique ou entre les deux valeurs. Les 44 et 99 évaluent à true en C car ils ne sont pas 0 , donc le résultat d'un ou entre eux retourne 1 (AKA vrai 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 est le premier argument et non null, il est retourné et imprimé.

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. // est le "bon" opérateur null-coalescent.

Voici la liste des valeurs dans Perl qui évaluent à FALSE ( de wikipedia) xxx


2 commentaires

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 - il est certainement pas null-coalescent. Oui, Undef || mourir mourra, mais donc 0 || Die . || évalue le LHS et s'il renvoie false il évalue le RHS. Underef vient de même évaluer à faux (Dieu merci). Inversement, // est l'opérateur null-coalescent introduit en 5.10 que ne déclenche que le RHS si le LHS est nul, avant que vous puissiez faire (défini $ a) || Die


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. 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 || . Découvrez ce perl -e'print 0 || "0" || Undef ' à voir.



1
votes

C et Perl se réfèrent à leur || 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.


0 commentaires

9
votes

Comme vous le souhaitez, les mots que vous recherchez sont pas em> "court-circuit". L'évaluation de court-circuit signifie que dans l'expression xxx pré>

si expression 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>

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> xxx

Malheureusement, cette version peut évaluer 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>

Le comportement C peut être émulé dans Perl par P >

!!(e1 || e2)


0 commentaires

0
votes

en C, || est une opération booléenne . En Perl, il s'agit d'une opération de type-agnostique qui traite le premier argument en tant que valeur booléenne. C'est la seule distinction.


2 commentaires

Bien sûr, il s'agit d'une opération entière dans Perl? Qu'en est-il de $ s = "bonjour" || "" ?


@frunsi: lol, je ne sais pas la terminologie de type de Perl.