Ich schreibe einen kleinen Parser, der einen OR-Operator und einen AND-Operator haben wird. Wenn Sie eine Reihe von ORs und ANDs sehen, welche sind Ihrer Erwartung nach verbindlicher? Geben Sie den Ausdruck a & b | c
, erwarten Sie, dass es (a&b)|c
oder a&(b|c)
bedeutet? Kannst du irgendeinen Grund angeben, eines vor dem anderen zu bevorzugen?Logisches ODER gegen logisches UND: Was sollte bindender sein?
Antwort
Machen Sie, was alle anderen tun; UND bindet fester als OR (siehe z. B. C Operator Precedence Table). Dies ist die Konvention, die alle erwarten, also adoptieren Sie die principle of least surprise.
Diese Wahl ist nicht willkürlich. Es beruht auf der Tatsache, dass AND und OR einer ähnlichen Beziehung folgen, um zu multiplizieren bzw. zu addieren; siehe z.B. http://en.wikipedia.org/wiki/Boolean_logic#Other_notations.
Beachten Sie auch, dass Benutzer Ihrer Sprache dringend dazu aufgefordert werden sollten, Klammern zu verwenden, um ihren Lesern ihren Code klar zu machen. Aber das liegt an ihnen!
Wenn Sie es wie Sie diskrete Mathematik betrachten würde, würde ich sagen PEMDAS führt Sie zu sagen, dass die UND ist verbindlicher. Das ist jedoch nicht immer der Fall.
Ich empfehle Ihnen, Ihren Benutzern zu empfehlen, überall dort Klammern zu verwenden, wo Unklarheiten bestehen.
Normalerweise hat & Vorrang vor | in vielen Szenarien. Sie können Ausdrücke jedoch auf eine vollständige Klammerform beschränken.
AND und OR in Boolesche Algebra sind äquivalent zu * und - in regelmäßigen Algebra, so macht es Sinn, das und bindet härter als oder gerade wie * härter bindet als +:
A B A*B A&B A+B A|B
0 0 0 0 0 0
0 1 0 0 1 1
1 0 0 0 1 1
1 1 1 1 1(>0) 1
- 1. Logisches Modell gegen Domain-Modell
- 2. logisches ODER in MySQL
- 3. Short Circuit Logisches ODER-Verhalten
- 4. SQL Server Logisches Lesen
- 5. Logisches Problem - Java
- 6. logisches ODER in Java funktioniert nicht?
- 7. Sharepoint Logisches Design
- 8. Logisches MultiIndexing in Pandas
- 9. verwirrt durch C++ logisches ODER (||) operator
- 10. Wie funktioniert logisches UND (&&) in C#?
- 11. logisches Volumen in Ubuntu erweitern
- 12. Logisches vs Numerisches Array in MATLAB
- 13. Logisches Löschen aus einer EJB-Datenbank
- 14. Logisches Array aus numpy Array erstellen
- 15. Logisches Problem während der Verwendung von Beschleunigungsmesser
- 16. Logisches NOT auf propEq anwenden und in ramda filtern
- 17. ngIf - Logisches Problem mit meinem Angular2 Code
- 18. Logisches Muster - Produziere die erwarteten Ausgaben
- 19. logisches Volume erstellen mit Python CGI
- 20. Better Class-Struktur für logisches Ausdrucksparsing und Auswertung
- 21. C#. Logisches Rätsel mit Bitoperationen. Nur ein Bit ist gesetzt?
- 22. Anzeigen von Datensätzen in aufsteigender Reihenfolge - Logisches Problem
- 23. Wie verwendet man logisches OR in SPARQL regex()?
- 24. Beenden äußerte Schleife von Unterprogramm ohne logisches Variable
- 25. sql Profis benötigt, um logisches Problem zu lösen
- 26. Ich bin neugierig, ob Logisches Programm kann Algebra tun
- 27. Mögliches logisches Problem Hinzufügen eines Objekts zu einer Arraylist
- 28. Wie lösche ich (logisches Löschen) für alle Entitäten in Eclipselink
- 29. Generierung von Haskell-Code von COQ: Logisches oder arity Wert verwendet
- 30. Was ist die maximale Anzahl von Eingängen für ein logisches Gatter?
Ich benutze Klammern und/oder Abstand, um es explizit zu machen. –