Beginnen wir mit dem einfachsten Operator, dem Pluszeichen (+). Das Pluszeichen (+) ist ein binärer Operator – das heißt, das Pluszeichen verbindet nur zwei Zahlen, niemals die dritte oder mehrere Zahlen.
Daher wird „1 plus 2 plus 3“ im Computer ausgedrückt als:
(1 + 2) + 3 // aor
1 + (2 + 3) // bObwohl wir es normalerweise als 1 + 2 + 3 schreiben, bedeutet das nicht, dass es in unserer Mathematik äquivalent zu 1+2+3 ist.
Stellt 1+2+3 in der Mathematik also a oder b dar?
Wenn die Auswertung des Computers linksassoziativ ist, entspricht dieser Ausdruck dem ersten Typ a. Wenn er rechtsassoziativ ist, entspricht dieser Ausdruck dem zweiten Typ b.
Das einfache Verständnis von 1 + 2 + 3 ist „addiere 1, 2 und 3 zusammen“. In der Mathematik, mit der wir konfrontiert sind, geht es tatsächlich darum, drei Zahlen zu addieren. Aber in Programmiersprachen ist es nicht nur das.
Wie bereits erwähnt, kann das +-Zeichen nicht mit drei oder mehr Zahlen operieren und kann nur an Additionsoperationen mit zwei Zahlen teilnehmen.
Plus und Minus sind übrigens unäre Operatoren, obwohl sie dieselben Symbole wie die binären Operatoren Addition und Subtraktion verwenden. Gehen Sie also nicht davon aus, dass +4 tatsächlich 0+4 entspricht sie sind nicht gleichwertig,
+4 ist eine Ganzzahl, aber 0+4 ist ein Additionsausdruck, der genau +4 ergibt.
In Java können wir short a = +4 schreiben, aber wenn wir short a = 0 + 4 schreiben, wird eine Warnung generiert.
Es gibt noch ein weiteres Beispiel, ebenfalls über kurze,
kurzes b = 1;
kurzes b = b + 4; // Warnung
short b += 4; // Keine Warnung. Wie funktioniert also 1 + 2 + 3? In der Programmiersprache der von Neumann-Architektur gibt es einen Nebeneffekt – ich bin es gewohnt, diesen zu nennen: „Wenn sich der Rechenprozess des Computers vom Denkprozess des Gehirns des Programmierers unterscheidet, spricht man von einem Nebeneffekt“ (obwohl dies der Fall ist). steht in dem Buch nicht so geschrieben) Ja, aber das habe ich immer gedacht. Ursprünglich dachten Sie, es wäre so, aber es stellt sich heraus, dass der Computer dies nicht tut. Ich nenne es einen Nebeneffekt.
Wenn Sie die vorherigen „Aussagen und Ausdrücke“ gelesen haben, kann dies folgendermaßen verstanden werden:
1 + 2 ist ein Ausdruck, dessen Rückgabewert 3 ist. Der Rückgabewert dieses Ausdrucks wird dann zu einem anderen Ausdruck 3 + 3 addiert und das Endergebnis ist 6.
Wir schreiben diesen Code mit der Anweisung um:
// Berechne 1 + 2 + 3
var a = 1 + 2;
var b = a + 3;Wenn wir diesen Ausdruck in Lisp auswerten, gibt es keine Nebenwirkungen.
(+ (+ 1 2) 3) Wenn Sie es noch nicht verstehen oder dieses Beispiel zu speziell ist, ändern wir es in ein anderes.
5 > 4 > 3 In der Mathematik ergibt diese Gleichung wahr. Wenn wir diesen Code in der Sprache C schreiben, gibt er tatsächlich false zurück.
Der Grund ist derselbe wie oben. Das Größer-als-Zeichen (>) ist eine binäre Operation. Das von 5 > 4 zurückgegebene Ergebnis ist wahr. also 1 > 3, das Endergebnis ist natürlich falsch.
Kurz gesagt, wir kehren zum Standpunkt des Artikels „Anweisungen und Ausdrücke“ zurück: Jeder Ausdruck in einer Programmiersprache hat einen Wert.
Obwohl Operatoren in Programmiersprachen mit Operatoren in der Mathematik identisch sind, sind sie nicht gleichwertig. Wenn Sie ein Programm schreiben, schreiben Sie es, damit die Leute es lesen können. Wenn Sie ein Programm debuggen, müssen Sie lernen, über die Bedeutung des Codes auf computergestützte Weise nachzudenken.
Ich bin es gewohnt, Operatoren als Funktionen zu verstehen. 2 + 5 ist beispielsweise tatsächlich add(2, 5) oder 2.add(5). Soll ich Ihnen heimlich sagen: „Tatsächlich tun das viele Sprachen.“