‘AND’ vs ‘&&’ als Operator

Lesezeit: 6 Minuten

AND vs als Operator
ts.

Ich habe eine Codebasis, für deren Verwendung sich Entwickler entschieden haben AND und OR anstatt && und ||.

Ich weiß, dass es einen Unterschied in der Priorität der Operatoren gibt (&& geht vor and), aber mit dem gegebenen Rahmen (PrestaShop um genau zu sein) ist es eindeutig kein Grund.

Welche Version verwendest du? Ist and besser lesbar als &&? Oder gibt es keinen Unterschied?

  • Beachten Sie, dass ~ ist der bitweise NOT-Operator und nicht der logische. 😉

    – Gumbo

    10. Mai 2010 um 14:26 Uhr

  • Ja, ich weiß. Schlechte Angewohnheiten 🙂 . Es ist ein bisschen seltsam, dass es in PHP ‘and’, ‘or’ und ‘xor’ gibt, aber kein ‘not’, oder?

    – ts.

    12. Mai 2010 um 10:30 Uhr

  • @ts: Die richtige Antwort hier ist die von R. Bemrose bereitgestellte stackoverflow.com/questions/2803321/and-vs-as-operator/…

    – Marco Demaio

    24. Mai 2011 um 15:45 Uhr

  • ! ist der logische Not-Operator

    – Messersturm

    30. Mai 2011 um 8:15 Uhr

  • @chiliNUT ganz richtig. Damals muss es Sinn gemacht haben. Sieht so aus, als wäre die lauernde falsche Antwort an dieser Stelle bestraft worden 🙂

    – Doppeljosch

    28. März 2014 um 19:34 Uhr

1646963650 153 AND vs als Operator
Machtherr

Wenn du benutzt AND und ORwirst du irgendwann über so etwas stolpern:

$this_one = true;
$that = false;

$truthiness = $this_one and $that;

Willst du raten, was $truthiness gleich?

Wenn du gesagt hättest false… bzzzt, sorry, falsch!

$truthiness oben hat den Wert true. Warum? = hat ein höheren Vorrang als and. Das Hinzufügen von Klammern zur Darstellung der impliziten Reihenfolge macht dies klarer:

($truthiness = $this_one) and $that

Wenn Sie verwendet haben && anstatt and Im ersten Codebeispiel würde es wie erwartet funktionieren und sein false.

Wie in den Kommentaren unten besprochen, funktioniert dies auch, um den richtigen Wert zu erhalten, da Klammern eine höhere Priorität haben als =:

$truthiness = ($this_one and $that)

  • +1: Dies sollte in der PHP-Dokumentation laut und deutlich gemacht werden, oder PHP sollte sich ändern und diesen Operatoren oder DEPRECATE denselben Vorrang einräumen and or ein für alle Mal. Ich habe zu viele Leute gesehen, die dachten, sie seien genau dasselbe, und die Antworten hier sind mehr Erfahrungsberichte.

    – Marco Demaio

    24. Mai 2011 um 15:44 Uhr

  • Tatsächlich haben auch andere Sprachen (z. B. Perl und Ruby) diese Varianten mit der gleichen Präzedenzunterscheidung, sodass es nicht sinnvoll wäre, von diesem Standard abzuweichen (so verwirrend es für Anfänger sein mag), indem die Präzedenz in PHP gleich gemacht wird. Ganz zu schweigen von der Abwärtskompatibilität von unzähligen PHP-Anwendungen.

    – Mladen Jablanovic

    25. Januar 2012 um 8:27 Uhr

  • Die Unfähigkeit der Leute, die Dokumentation für eine Sprache zu lesen, macht die Entscheidungen der Sprache nicht falsch. Wie Mladen anmerkt, verwenden auch Perl und Ruby diese zusätzlichen Operatoren, und zwar mit denselben Vorrangigkeiten. Es ermöglicht Konstrukte wie z $foo and bar(), die nette Abkürzungen für if-Anweisungen sind. Wenn unerwartetes Verhalten (durch schlechte Dokumentation oder Nichtlesen) ein Grund wäre, etwas nicht zu verwenden, würden wir überhaupt nicht über die Verwendung von PHP sprechen.

    – Altreus

    30. August 2012 um 11:49 Uhr

  • Ich habe 3 Minuten gebraucht, um die falsche Zeile zu finden: $das = wahr🙁 und was ist mit $truthiness = ($this and $that); für mich sieht es besser aus 🙂

    – Dmitri Kozmenko

    6. Mai 2013 um 15:52 Uhr


  • Ich stimme Dmitriy zu – das Umschließen der booleschen Auswertung in Klammern hilft, die Absicht des Codes zu verdeutlichen. Ich denke, der Operator und seine Funktion, wie sie jetzt existieren, sind wertvoll und konsistent mit anderen Sprachen, es ist die Aufgabe des Programmierers, die Sprache zu verstehen.

    – Jon z

    12. Mai 2013 um 13:59 Uhr

AND vs als Operator
adamJLev

Je nachdem, wie es verwendet wird, kann es notwendig und sogar praktisch sein.
http://php.net/manual/en/language.operators.logical.php

// "||" has a greater precedence than "or"

// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;

// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;

Aber in den meisten Fällen scheint es eher eine Sache des Entwicklergeschmacks zu sein, wie jedes Vorkommen davon, das ich im CodeIgniter-Framework gesehen habe, wie @Sarfraz erwähnt hat.

  • Es ist erwähnenswert, dass das „true“ nicht ignoriert wird, wenn dieser Ausdruck Teil einer größeren Anweisung ist. Betrachten Sie den Fall if ($f = false or true) $f = true; – das Ergebnis wäre das $f wird am Ende wahr, weil der Ausdruck insgesamt als wahr ausgewertet wird.

    – Chris Browne

    15. März 2012 um 22:04 Uhr

  • nein, du hast die Variable später einfach überschrieben. der Ausdruck immer noch als falsch ausgewertet wird, dann überschreiben Sie ihn in der nächsten Zeile mit wahr.

    – r3wt

    13. Mai 2014 um 21:50 Uhr

  • Eigentlich hatte er recht. Zuerst, $f wird falsch zugewiesen – aber die Bedingung wird als wahr ausgewertet, also dann $f wird überschrieben. Wenn die Bedingung als falsch bewertet wird, $f würde so oder so nie überschrieben werden.

    – ahouse101

    29. Juni 2014 um 23:58 Uhr

  • Es ist lächerlich zu behaupten, die Entwickler sollten ihrem eigenen Geschmack folgen. Vergessen Sie den Albtraum eines anderen Entwicklers, der versucht, denselben Code zu pflegen. Der Entwickler, der den Code selbst geschrieben hat, würde semantische Fehler in jedem Code machen, der geschrieben wurde, weil er/sie es vorgezogen hat and über &&wo and funktioniert wie erwartet in nur einigen Situationen und && funktioniert wie erwartet in allen Situationen.

    – ADTC

    7. September 2018 um 19:49 Uhr

Seit and hat einen niedrigeren Vorrang als = Sie können es in der Bedingungszuweisung verwenden:

if ($var = true && false) // Compare true with false and assign to $var
if ($var = true and false) // Assign true to $var and compare $var to false

Aus Sicherheitsgründen setze ich meine Vergleiche immer in Klammern und platziere sie. Auf diese Weise muss ich mich nicht auf die Operatorpriorität verlassen:

if( 
    ((i==0) && (b==2)) 
    || 
    ((c==3) && !(f==5)) 
  )

AND vs als Operator
arviman

Vorrang unterscheidet sich zwischen && und und (&& hat Vorrang vor und), was in Kombination mit einem ternären Operator zu Verwirrung führt. Zum Beispiel,

$predA && $predB ? "foo" : "bar"

wird a zurückgeben Schnur wohingegen

$predA and $predB ? "foo" : "bar"

wird a zurückgeben boolesch.

1646963652 247 AND vs als Operator
Mahmoud Zalt

Lassen Sie mich den Unterschied zwischen “und” – “&&” – “&” erklären.

“&&” und “and” sind beides logische UND-Verknüpfungen und sie tun dasselbe, aber die Operatorpriorität ist unterschiedlich.

Der Vorrang (Priorität) eines Operators gibt an, wie “fest” er zwei Ausdrücke miteinander verbindet. Im Ausdruck 1 + 5 * 3 ist die Antwort beispielsweise 16 und nicht 18, da der Multiplikationsoperator (“*”) eine höhere Priorität hat als der Additionsoperator (“+”).

Das Mischen in einem einzigen Vorgang kann in einigen Fällen zu unerwarteten Ergebnissen führen
Ich empfehle, immer && zu verwenden, aber das ist Ihre Wahl.


Andererseits ist “&” ein bitweise UND-Verknüpfung. Es wird für die Auswertung und Manipulation bestimmter Bits innerhalb des ganzzahligen Werts verwendet.

Beispiel: Wenn Sie (14 & 7) machen, wäre das Ergebnis 6.

7   = 0111
14  = 1110
------------
    = 0110 == 6

1646963653 546 AND vs als Operator
Salat

welche Version verwendest du?

Wenn die Codierungsstandards für die bestimmte Codebasis, für die ich Code schreibe, angeben, welcher Operator verwendet werden sollte, werde ich es tun bestimmt verwende das. Wenn nicht, und der Code diktiert was verwendet werden sollte (nicht oft, kann leicht umgangen werden), dann werde ich das verwenden. Andernfalls, wahrscheinlich &&.

Ist ‘and’ besser lesbar als ‘&&’?

Ist es besser lesbar für dich. Die Antwort ist Ja und nein hängt von vielen Faktoren ab, einschließlich des Codes um den Bediener und tatsächlich die Person, die ihn liest!

|| gibt es ~ unterschied?

Jawohl. Sehen logische Operatoren zum || und bitweise Operatoren zum ~.

989550cookie-check‘AND’ vs ‘&&’ als Operator

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy