Ist der Zuweisungsoperator in Pascal korrekt geschrieben? Aufgabenverwalter. Eingabe-, Ausgabe- und Zuweisungsoperatoren

Unterrichtsart:

  • lehrreich Den Schülern wird ein neuer Pascal-Operator vorgestellt;
  • Wiederholung des Themas“ Innere Erinnerung Computer";
  • Festigung des erworbenen Wissens.

Unterrichtsthema:„Programmieren in Pascal. Aufgabenverwalter."

Ziele:

  • Führen Sie das Konzept des „Zuweisungsoperators“ ein.
  • Unterscheiden Sie zwischen Operationen, die für ganze Zahlen und reelle Zahlen gültig sind.
  • Konstruieren und bewerten Sie Ausdrücke mithilfe des Zuweisungsoperators korrekt.
  • Schreiben Sie Programme für einfache Aufgaben.

Unterrichtsdauer: 1 Stunde 30 Minuten.

WÄHREND DES UNTERRICHTS

Erste Stunde

1. Wiederholung des Themas der vorherigen Lektion „Datentypen“. Beispiele für die Verwendung von Wörtern, die gleich klingen, aber unterschiedliche semantische Bedeutungen haben.

Der Lehrer und die Schüler arbeiten im Frage-Antwort-Format (10 Minuten).

2. Der Lehrer erklärt ein neues Thema anhand einer Multimedia-Präsentationsstunde „Programmieren in Pascal. Aufgabenverwalter." Es wird eine Definition des Konzepts „Zuweisungsoperator“ gegeben und die allgemeine und strukturelle Form des Operators angegeben. Bevor wir uns mit der Funktionsweise des Zuweisungsoperators befassen, erinnern wir uns an das Thema „Zufallsspeicher, Eigenschaften“ und wiederholen es Arbeitsspeicher».

Begleitet von einer Präsentation. Anhang 1 (15 Minuten).

3. Die Schüler arbeiten unabhängig, lesen und machen sich Notizen zu einem neuen Thema (die Unterrichtspräsentation wird vorab auf den Computern der Schüler aufgezeichnet, die Fragen zum Notieren werden vom Lehrer festgelegt). Hier können sich Studierende mit den Texten von Programmen vertraut machen, die den Zuweisungsoperator verwenden Anlage 2(20 Minuten).

Zweite Lektion

4. Die Schüler arbeiten an der Tafel und machen Übungen (12-15 Minuten).
1. Der Lehrer führt eine Wissenskontrolle in Form eines Tests durch. Das Testprogramm wird vorab auf den Computern der Schüler aufgezeichnet. Die Punktzahl wird vom Programm vergeben. Anhang 5(10 Minuten).
5. Die Schüler arbeiten ein wenig selbstständig an den Karten oder schreiben und debuggen ein Programm in ALP Pascal, das den oder die Zuweisungsoperatoren verwendet (der Lehrer nennt die Nummern der Karten mit den Aufgaben). Die Studierenden erhalten für ihre Arbeit eine Note. Anhang 3 . Anhang 4(15 Minuten).
Hausaufgaben. Die Schüler werden gebeten, den Text eines einfachen Programms in ASL Pascal zu schreiben, das den oder die Aufgabenoperatoren verwendet (für diejenigen Schüler, die keine Zeit hatten, die Aufgabe im Unterricht zu erledigen).

Schlussfolgerungen:

  • Wiederholen Sie bis Block 1 das Thema der vorherigen Lektion.
  • Durch die Blöcke 2, 3 und 4 wird ein neues Thema „Zuweisungsoperator“ eingeführt und vertieft.
  • Durch die Blöcke 5 und 6 wird die Wissenskontrolle durchgeführt.

Programmierung in Pascal

Lektion Nr. 1 (2 Stunden). Variablen und Konstanten. Aufgabenverwalter

  1. Hausaufgaben überprüfen.
  2. Neues Thema.
  3. Hausaufgaben.

Hausaufgaben überprüfen.

2. Neues Thema: „Variablen und Konstanten. Aufgabenverwalter"

Variabel – ist der Name des Speicherbereichs (die Größe des Bereichs hängt vom Datentyp ab), in dem der der Variablen zugewiesene Wert gespeichert wird. Eine Variable kann mit einem Kästchen verglichen werden, in dem sich der Wert befindet (der beste Vergleich ist mit einem Mehrfamilienhaus, da etwas aus dem Kästchen entfernt werden kann und es das letzte sein wird, d. h. das Kästchen bleibt leer und die Variable gerade). (wenn es verwendet wurde, verbleibt es im Speicherbereich).
Konstant – feste einzelne numerische oder Textwerte, die sich während der Programmausführung nicht ändern können.
Aufgabenverwalter. Einer der am häufigsten verwendeten Operatoren Aufgabenverwalter. Gesamtansicht des Zuweisungsoperators:

Variablenname:= Ausdruck;

Ein Ausdruck kann ein bestimmter Wert sein (d. h. eine ganze Zahl oder eine reelle Zahl, zum Beispiel 22 oder 2,5, ein symbolischer Wert: „ABC“, ein logischer Wert: WAHR oder FALSCH) und ein bestimmter Ausdruck (Werte + Operationen darauf). ), dessen Ergebnis der Variablen auf der linken Seite zugewiesen wird.

BEISPIELE:

PAG:= 10;(spezifischer Wert als Zahl);
X:= X + 1;(Ausdruck);
C:=B;(Variablennamen);
G:= ‚HALLO‘; ( die spezifische Bedeutung ist symbolisch);
X:= (-A + SIN(Y) – 4 * B * X) / (2 * C);(mathematischer Ausdruck);
Y:= TRUE;(spezifischer logischer Wert).

Der Unterschied zwischen der Zuweisungsoperation in der Mathematik und der Programmierung.

In der Mathematik bedeutet der Ausdruck =b, dass die berechneten Werte für a und b gleich sein müssen.
In der Programmierung bedeutet A:=B, dass der an einem Speicherort namens B gespeicherte Wert an einem Speicherort namens A abgelegt wird. Daher der umgekehrte Ausdruck
B:= A liefert ein anderes Ergebnis.
Beispiel: Die Werte 5 und 9 werden jeweils in A und B platziert.

A: = 5;
B: = 9

a) Ergebnis der Operation A:= B;

b) Ergebnis der Operation B:= A;

Hier ist ein weiterer wesentlicher Unterschied zwischen dem Gleichheitszeichen und dem Zuweisungsoperator: A = A + 1;
In der Mathematik ist ein solcher Ausdruck einfach bedeutungslos, da die Identität falsch ist. Es gibt keine numerischen Werte von A, für die dies zutreffen würde. In der Programmierung bedeutet dies, dass 1 zum in Zelle A gespeicherten Wert addiert wird und der neu erhaltene Wert den alten in Zelle A ersetzt. Wenn A beispielsweise vor der Ausführung dieser Anweisung den Wert 5 hatte, dann nach der Ausführung wird gleich 6 sein.

Der folgende Unterschied: Der mathematische Ausdruck A + 9 – B = Die Programmierung dieses Ausdrucks ist sinnlos, da auf der linken Seite des Ausdrucks der Name des Speicherbereichs stehen muss, dem der auf der rechten Seite berechnete Wert zugewiesen wird. Wenn Sie versuchen, einen solchen Ausdruck in Ihr Programm einzufügen, erhalten Sie eine Fehlermeldung, da der Variablenname A + 9 – B lautet werde es nicht verstehen.

Schreiben Sie in der Standardform:

(– b + sqrt(sqr(b) – 4 * a * c))/(2 * a);
a/b * (c + d) – (a – b)/b/c + 1E – 8;

Referenzliste:

  • V.B. Popow„TURBO PASCAL für Schulkinder“, „Finanzen und Statistik“, Moskau, 1996
  • A.A. Cherno in „Notizen zum Informatikunterricht in den Klassen 9 – 11“, „Lehrer“, Wolgograd, 2004.
  • DM. Zlatopolsky„Ich gehe zum Informatikkurs. Programmieraufgaben, Klassen 7 - 11“, „Erster September“, Moskau, 2001.

Operator– eine Anweisung, bestimmte Aktionen auszuführen. Die Programmiersprache Pascal enthält 11 Operatoren.

Zuweisungsoperator in Pascal

Der Zuweisungsoperator ist der am häufigsten verwendete Operator in der Turbo Pascal-Sprache.

Aufzeichnungsformat: X:=A;
Wo: X- Variablennamen;
A- Ausdruck ;
:= - Zuweisungszeichen.

Operator-Job: Während der Ausführung des Operators wird der Wert auf der rechten Seite des Ausdrucks berechnet und dem Variablennamen zugewiesen.

Der Typ der Variablen und der Typ des Ausdrucks müssen übereinstimmen, es sei denn, der Ausdruck ist ein ganzzahliger Typ und die Variable ein reeller Typ. In diesem Fall wird der berechnete Wert des Ausdrucks in einen realen Typ konvertiert.

Beispiel 9.1. Schreiben Sie ein Programm zur Berechnung von Funktionen:

y=cosa+lnb; n=k+1; r=ord(#65).

Var
a, b, y: real;
k, n: ganze Zahl;
r:char;
t, v, u: Boolean;
* * *
y:= cos(a)+ln(b);
n:=k+1;
r:=ord(#65);
t:=(v und u)or(v und nicht u);
* * *
Ende.

Übergangsoperator in Pascal

In Turbo Pascal wird die natürliche Reihenfolge der Operatorausführung übernommen, d. h. in der Reihenfolge, in der sie im Programmtext erscheinen. Der Sprungoperator unterbricht die natürliche Reihenfolge der Ausführung von Anweisungen und übergibt die Kontrolle an die Anweisung, die mit der im Sprungoperator angegebenen Bezeichnung gekennzeichnet ist.

Aufnahmeformat: GoTo m;

Wo: Gehe zu- gehe zu;
M- Etikett

Operator-Job: Der Sprungoperator übergibt die Kontrolle an den mit dem Label gekennzeichneten Operator M.
Die Verwendung des Übergangsoperators im TR ist unerwünscht, da er die strukturelle Integrität des Programms verletzt. Ein solches Programm ist schwer zu lesen, zu debuggen und zu ändern. Es gibt Einschränkungen bei der Verwendung des Übergangsoperators in TR, die eine unsystematische Verwendung nicht zulassen.

Mit dem Übergangsoperator können Sie die Kontrolle innerhalb einer Ebene übertragen oder von einer internen Ebene auf eine externe Ebene wechseln. Übergänge von externen zu internen Ebenen sind verboten. Zum Beispiel von einem Programm in den Hauptteil einer Unterroutine oder innerhalb einer Schleifenanweisung oder Bedingungsanweisung.


Der Zuweisungsoperator ist der einfachste und gebräuchlichste Operator.

Zuweisungsoperatorformat

Ein Zuweisungsoperator ist ein Eintrag, der ein =-Symbol (Gleichheitszeichen) mit einem Variablennamen auf der linken Seite und einem Ausdruck auf der rechten Seite enthält. Der Zuweisungsoperator endet mit einem Vorzeichen; (Punkt mit Komma).

Variable = Ausdruck ; // Aufgabenverwalter

Der Zuweisungsoperator ist im Programmtext durch das Vorhandensein eines Gleichheitszeichens erkennbar. Der Ausdruck kann eine Konstante, eine Variable, ein Funktionsaufruf oder der Ausdruck selbst sein.

Ausführungsregel für den Zuweisungsoperator

Der Zuweisungsoperator ist wie jeder andere Operator ausführbar. Dies bedeutet, dass der Eintrag, aus dem der Zuweisungsoperator besteht, gemäß der Regel ausgeführt wird. Wenn der Zuweisungsoperator ausgeführt wird, wird der Wert auf der rechten Seite berechnet und dieser Wert dann der Variablen links vom Gleichheitszeichen zugewiesen. Durch die Ausführung des Zuweisungsoperators erhält die Variable auf der linken Seite immer einen neuen Wert; Dieser Wert kann vom vorherigen Wert dieser Variablen abweichen oder mit diesem identisch sein. Der Ausdruck auf der rechten Seite des Zuweisungsoperators wird entsprechend der Reihenfolge ausgewertet, in der die Ausdrücke ausgewertet werden (siehe Operationen und Ausdrücke).

Beispiele für Zuweisungsoperatoren

In einem Zuweisungsoperator ist es möglich, den Typ einer Variablen links vom Gleichheitszeichen zu deklarieren:

int In = 3 ;
doppelt Do = 2,0 ;
bool Bo = true ;
Farbe Co = 0 x008000 ; // Der Variablen Co wird der Wert einer Konstante zugewiesen
string St = "sss"; // Der Variablen St wird der Wert einer Konstante zugewiesen
datetime Da = D „01.01.2004“; // Der Variablen Da wird der Wert einer Konstante zugewiesen

Zuvor deklarierte Variablen werden im Zuweisungsoperator ohne Angabe des Typs verwendet.

In = 7 ; // Variable In wird der Wert einer Konstante zugewiesen
Do = 23,5 ; // Der Variablen Do wird der Wert einer Konstante zugewiesen
Bo = 0 ; // Der Variablen Bo wird der Wert einer Konstante zugewiesen

In einem Zuweisungsoperator ist eine Variablentypdeklaration auf der rechten Seite des Gleichheitszeichens nicht zulässig:

In = int In_2; // Die Deklaration des Variablentyps auf der rechten Seite ist verboten
Do = double Do_2; // Die Deklaration des Variablentyps auf der rechten Seite ist verboten

Der Zuweisungsoperator erlaubt keine erneute Deklaration des Variablentyps.

Int In; // Deklaration des Typs der Variablen In
int In = In_2; // Eine erneute Deklaration der Variablen (In) ist nicht zulässig

Beispiele für die Verwendung benutzerdefinierter und Standardfunktionen auf der rechten Seite:

In = My_Function () ; // In wird der Benutzerwert zugewiesen. Funktionen
Do = Gipo(Do1, Do1); // Do wird der Benutzerwert zugewiesen. Funktionen
Bo = IsConnected () ; // Bo ist auf Standard gesetzt. Funktionen
St = ObjectName(0); // St ist auf Standard gesetzt. Funktionen
Da = TimeCurrent(); // Da ist auf Standard eingestellt. Funktionen

Beispiele für die Verwendung auf der rechten Seite von Ausdrücken:

In = (My_Function() + In2) / 2; // Der Variablen In zugewiesen
// ..der Wert des Ausdrucks
Do = MathAbs (Do1 + Gipo (Do2, 5) + 2,5); // Der Variablen Do zugewiesen
// ..der Wert des Ausdrucks

Bei der Durchführung von Berechnungen im Zuweisungsoperator gelten die Regeln für die Umwandlung von Datentypen (siehe Typumwandlung).

Beispiele für Zuweisungsoperatoren in Kurzform

MQL4 verwendet auch eine Kurzform zum Schreiben von Zuweisungsoperatoren. Dies ist eine Form von Zuweisungsoperatoren, die andere Zuweisungsoperatoren als den Zuweisungsoperator verwendet = (Gleichheitszeichen) (siehe Operationen und Ausdrücke). Für Kurzformoperatoren gelten dieselben Regeln und Einschränkungen. Aus Gründen der Übersichtlichkeit wird im Code die Kurzform der Zuweisungsoperatoren verwendet. Der Programmierer kann nach eigenem Ermessen die eine oder andere Form des Zuweisungsoperators verwenden. Jeder kurze Zuweisungsoperator kann problemlos in einen vollständigen Zuweisungsoperator umgeschrieben werden, und das Ergebnis der Ausführung des Operators ändert sich nicht.

In /= 33 ;
In = In / 33 ;

St += "_exp7"; // Kurzform des Zuweisungsoperators
St = St + „_exp7“; // Vollständige Form des Zuweisungsoperators

Wir haben uns die einfachsten in Pascal geschriebenen Programme in der PascalABC.Net-Umgebung angesehen. Dort haben wir arithmetische Operationen an Zahlen durchgeführt und diese dann mit dem Operator write (oder writeln) ausgegeben. Wir haben jedoch nicht den Zuweisungsoperator verwendet, der in der Programmierung sehr verbreitet ist. Was ist also eine Aufgabe?

Betrachten wir einige Variablen M und N, die bestimmte Werte haben, sagen wir M = 12, N = 34. Für jeden dieser Werte weist der Computer einen separaten Speicherabschnitt zu, der eine bestimmte Anzahl von Zellen oder Bits (1 Zelle) darstellt = 1 Bit). Mehrere Zahlen (oder andere Arten von Daten) können nicht am selben Speicherort gespeichert werden, und zwar aus demselben Grund, aus dem zwei Liter Wasser nicht in einem Ein-Liter-Gefäß enthalten sein können.

Sehr oft ist es notwendig, den Wert der Variablen M, der 12 beträgt, zu entfernen und ihn stattdessen dem Wert der Variablen N, also 34, anzupassen. Was macht der Computer? Er findet den Speicherort, an dem der Wert von N „versteckt“ ist, kopiert ihn (die Zahl 34), kehrt zum Speicherort M (gleich 12) zurück, löscht dessen Wert und fügt einen neuen ein, also 34. As Als Ergebnis wurde aus M = 12 M = 34.

Unter Zuweisung versteht man das Aufzeichnen von Daten in einem Abschnitt des Computerspeichers, der für den Wert des Werts M vorgesehen ist, wobei die Daten in einem anderen Abschnitt des Computerspeichers gespeichert werden, in dem der Wert der Größe N aufgezeichnet wird.

Die Zuweisung wird als M:= N geschrieben, was bedeutet, dass der Wert N zu M geht. Die natürliche Frage ist: Was ist mit dem Wert N passiert? Nichts, es schien nur den Wert mit der Variablen M zu „teilen“, veränderte sich aber selbst nicht. Manchmal denken Programmierneulinge, dass die Variablen M und N ihre Werte ändern, aber das ist nicht der Fall. Um dieses Phänomen zu veranschaulichen, betrachten Sie das Problem:

Aufgabe. Gegebene Zahlen: M = 12, N = 34. Vertauschen Sie ihre Werte.

Wir müssen der Nummer M 34 und der Nummer N 12 zuweisen (umgekehrt). Sehr oft schreiben unerfahrene Programmierer so:


In der ersten Codezeile wird M N zugewiesen, also M:= 34. In der zweiten Zeile wird N M zugewiesen, aber die letzte Variable ist nicht mehr gleich 12, da sie ihren Wert in geändert hat vorherige Zeile auf 34. Daher sind beide Variablen gleich 34. Zur Demonstration schreiben wir den vollständigen Code, den Sie in der Programmierumgebung PascalABC.Net neu schreiben müssen:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var M, N: Geben Sie Ganzzahl ein;

Beschreibung:

")" onmouseout="toolTip()">integer
; beginnen writeln( „Geben Sie die Zahlen M und N ein:“ <-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } M := N; { <== M присваивается N, поэтому M = 34 } N := M; { <== N присваивается M, поэтому N = 34 } Ende.

Führen Sie das Programm zur Ausführung aus. Wenn Sie für M aufgefordert werden, geben Sie 12 ein, für N geben Sie 34 ein und drücken Sie die Eingabetaste. Wenn alles richtig gemacht wurde, sollten Sie Folgendes sehen:

Geben Sie die Zahlen M und N ein:
M=12
N=34
Ergebnis:
M = 34 N = 34

Wie Sie der letzten Zeile entnehmen können, ist dies nicht das, was wir wollten – die Werte von M und N zu vertauschen.

Um das richtige Ergebnis zu erzielen, müssen Sie den Anfangswert der Variablen M festlegen, zum Beispiel s:= M („M merken“, indem Sie seinen Wert in die Variable s schreiben). Infolgedessen weisen wir der Zahl N nicht den Wert der bereits geänderten Variablen M zu, sondern verwenden den ihr entsprechenden Wert s:


Gemäß den letzten Änderungen wird das bisherige Programm wie folgt aussehen:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var M, N, s: Geben Sie Ganzzahl ein;

Beschreibung:
Stellt eine 32-Bit-Ganzzahl mit Vorzeichen dar.

Wertebereich: -2 147 483 648 .. 2 147 483 647")" onmouseout="toolTip()">integer
; beginnen writeln( „Geben Sie die Zahlen M und N ein:“); write(" M = "); readln(M); (<-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } s := M; { <== запоминаем M, равное 12 } M := N; (M = 34, weil N = 34) N := s; (N = 12, da s = 12) writeln("Ergebnis:"); writeln(" M = ", M, " N = ", N); readln Ende.

Schreiben Sie dieses Programm in PascalABC.Net neu und führen Sie es aus (Taste F9 auf der Tastatur). Wenn die Antwort so lautet:

Geben Sie die Zahlen M und N ein:
M=12
N=34
Ergebnis:
M = 34 N = 12

dann funktioniert das Programm korrekt. Wie aus der letzten Zeile hervorgeht, haben die Werte der Zahlen M und N ihre Plätze getauscht.

Abtretung- ein Bindungsmechanismus in der Programmierung, der es Ihnen ermöglicht, die Verbindungen zwischen den Namen von Datenobjekten (normalerweise Variablen) und ihren Werten dynamisch zu ändern. Streng genommen ist das Ändern von Werten ein Nebeneffekt der Zuweisungsoperation, und in vielen modernen Programmiersprachen gibt die Operation selbst auch ein Ergebnis zurück (normalerweise eine Kopie des zugewiesenen Werts). Auf der physikalischen Ebene besteht das Ergebnis einer Zuweisungsoperation darin, Speicherzellen oder Prozessorregister zu schreiben und neu zu schreiben.

Zuweisung ist eines der zentralen Konstrukte in imperativen Programmiersprachen und wird effizient und einfach auf der von Neumann-Architektur implementiert, die die Grundlage moderner Computer bildet.

In objektorientierten Programmiersprachen unterscheidet sich die Zuweisungssemantik erheblich. Beispielsweise wird in der Kotlin-Sprache ein Objekt bei der Zuweisung kopiert, und in der Rust-Sprache wird ein Objekt verschoben (Verschiebungssemantik) und der alte Link wird ungültig.

Satz<целевая_переменная> <выражение>

Dieser Eintrag entspricht dem Aufruf der Funktion. Ebenso im alten COBOL-Stil:

MULTIPLIZIEREN SIE 2 MIT 2, ERGEBEN SIE VIER.

Arbeitsalgorithmus

  • Berechnen Sie den linken Wert des ersten Operanden. In diesem Stadium wird der Standort des Zielobjekts, dem Empfänger des neuen Werts, bekannt.
  • Berechnen Sie den rechten Wert des zweiten Operanden. Diese Stufe kann beliebig groß sein und weitere Aussagen (inkl. Aufgaben) beinhalten.
  • Ordnen Sie den berechneten rechten Wert dem linken Wert zu. Erstens muss bei einem Typkonflikt ein Cast durchgeführt werden (bzw. aufgrund der Unmöglichkeit eine Fehlermeldung ausgegeben werden). Zweitens kann die eigentliche Zuweisung von Werten in modernen Programmiersprachen ersetzt werden und nicht nur die Übertragung von Werten von Speicherzellen umfassen (z. B. auf die „Eigenschaften“ von Objekten in , Operatorüberladung).
  • Gibt den berechneten rechtshändigen Wert als Ergebnis der Operation zurück. Nicht in allen Sprachen erforderlich (z. B. nicht in Pascal erforderlich).

Bezeichnung

Die Wahl des Zuweisungszeichens sorgt unter Sprachentwicklern für Diskussionen. Es gibt ein Argument dafür, dass die Verwendung des =-Symbols für die Zuweisung Programmierer verwirrt und auch die Frage aufwirft, ob es schwierig ist, ein Symbol für den Vergleichsoperator auszuwählen, das gut umzusetzen ist.

Ein notorisch schlechtes Beispiel ist die Wahl des Gleichheitszeichens zur Angabe von Zuweisungen, die auf Fortran aus dem Jahr 1957 zurückgeht und auch heute noch von zahlreichen Sprachentwicklern blind wiederholt wird. Diese schlechte Idee stürzt die uralte Tradition, das =-Zeichen zur Bezeichnung eines Gleichheitsvergleichs zu verwenden, ein Prädikat, das die Werte „wahr“ oder „falsch“ annimmt. Aber in Fortran bedeutete dieses Symbol Zuweisung und erzwang Gleichheit. In diesem Fall befinden sich die Operanden an einer ungleichen Position: Der linke Operand, die Variable, muss gleich dem rechten Operanden, dem Ausdruck, gemacht werden. Daher bedeutet x = y nicht dasselbe wie y = x.

Originaltext (Englisch)

Ein berüchtigtes Beispiel für eine schlechte Idee war die Wahl des Gleichheitszeichens zur Kennzeichnung einer Zuweisung. Es geht auf Fortran aus dem Jahr 1957 zurück und wurde von Heerscharen von Sprachdesignern blindlings kopiert. Warum ist es eine schlechte Idee? Weil es eine jahrhundertealte Tradition zunichte macht, „=“ einen Vergleich auf Gleichheit bezeichnen zu lassen, ein Prädikat, das entweder wahr oder falsch ist. Aber Fortran machte daraus eine Aufgabe, die Durchsetzung von Gleichheit. In diesem Fall sind die Operanden ungleich: Der linke Operand (eine Variable) soll dem rechten Operanden (ein Ausdruck) gleichgesetzt werden. x = y bedeutet nicht dasselbe wie y = x.

Die Umsetzung dieser Position von Wirth kann darin gesehen werden, dass in der Pascal-Sprache, deren Autor er ist, der Zuweisungsoperator:= lautet, während er zum Vergleich einfach = verwendet wird.

Die Wahl des Symbols für den Gleichheitsoperator in der Sprache bei Verwendung von = als Zuweisung wird gelöst:

  • Durch die Einführung eines neuen Sprachsymbols für den Gleichheitsoperator.
A = B = C

Der Variable A wird der boolesche Wert des Relationsausdrucks B = C zugewiesen. Diese Notation führt zu einer eingeschränkten Lesbarkeit und wird selten verwendet.

Semantische Merkmale

Die „intuitive“ (für Programmierer imperativer Sprachen) Art, Aufgaben zu interpretieren, ist nicht immer die einzig richtige und mögliche.

Es ist nicht immer möglich, anhand der in imperativen Sprachen verwendeten Syntax zu verstehen, wie die Zuweisungssemantik implementiert wird, es sei denn, sie ist in der Sprache explizit definiert.

A = b = a a = 1000

Danach wird b einen Wert haben – einfach weil sein Wert tatsächlich der Wert von a ist. Die Anzahl der Verweise auf dasselbe Datenobjekt wird als seine Kardinalität bezeichnet, und das Objekt selbst wird getötet (zerstört oder durch Müll gesammelt), wenn seine Kardinalität Null erreicht. Programmiersprachen niedrigerer Ebenen (z. B. C) ermöglichen es dem Programmierer, explizit zu steuern, ob Zeigersemantik oder Kopiersemantik verwendet wird.

Ersatzbetrieb

Viele Sprachen bieten die Möglichkeit, die Bedeutung einer Zuweisung zu ändern: entweder durch den Eigenschaftsmechanismus oder durch Überladung des Zuweisungsoperators. Eine Ersetzung kann erforderlich sein, um die Gültigkeit des zugewiesenen Werts zu überprüfen oder andere zusätzliche Vorgänge durchzuführen. Das Überladen des Zuweisungsoperators wird häufig verwendet, um „Deep Copy“ bereitzustellen, d. h. das Kopieren von Werten anstelle von Referenzen, die in vielen Sprachen standardmäßig kopiert werden.

Solche Mechanismen ermöglichen eine komfortablere Arbeit, sodass für den Programmierer kein Unterschied zwischen der Verwendung eines integrierten und eines überlasteten Operators besteht. Aus dem gleichen Grund sind Probleme möglich, da sich die Aktionen eines überlasteten Operators völlig von den Aktionen des Standardoperators unterscheiden können und der Funktionsaufruf nicht offensichtlich ist und leicht mit einer integrierten Operation verwechselt werden kann.

Erweiterte Designs

Zuweisungskonstrukte in verschiedenen Programmiersprachen

Da die Zuweisungsoperation weit verbreitet ist, versuchen Programmiersprachenentwickler, neue Konstrukte zur vereinfachten Aufzeichnung typischer Operationen zu entwickeln (sogenannten „syntaktischen Zucker“ hinzufügen). Darüber hinaus ist in Low-Level-Programmiersprachen das Einschlusskriterium für eine Operation oft die Fähigkeit, sie in effizienten ausführbaren Code zu kompilieren. Die C-Sprache ist besonders für diese Eigenschaft bekannt.

Mehrere Ziele

Eine Alternative zum einfachen Operator ist die Möglichkeit, den Wert eines Ausdrucks mehreren Objekten zuzuweisen. In der Sprache PL/1 beispielsweise der Operator

SUMME, GESAMT = 0

weist gleichzeitig den Variablen SUM und TOTAL den Wert Null zu. In der Ada-Sprache ist eine Zuweisung ebenfalls ein Operator und kein Ausdruck, daher lautet die Notation für eine Mehrfachzuweisung:

SUMME, GESAMT: Ganzzahl:= ​​0;

Eine ähnliche Zuweisung in Python hat die folgende Syntax:

Summe = Gesamt = 0

Im Gegensatz zu PL/1, Ada und Python, wo Mehrfachzuweisungen nur als verkürzte Form der Notation betrachtet werden, hat diese Syntax in C, Lisp und anderen Sprachen eine strikte Grundlage: Der Zuweisungsoperator gibt einfach den ihnen zugewiesenen Wert zurück (siehe oben). ). Das letzte Beispiel ist also tatsächlich:

Summe = (Gesamt = 0)

Eine solche Zeile funktioniert in C (wenn Sie am Ende ein Semikolon hinzufügen), verursacht jedoch in Python einen Fehler.

Parallele Zuordnung

Die letzte Option funktioniert nur mit Typen, die Bitoperationen unterstützen (für Double lässt der Sprachcompiler beispielsweise nicht zu, dass Sie Variablenwerte auf diese Weise austauschen).

ein ||= 10

Diese Konstruktion weist der Variablen a nur dann einen Wert zu, wenn der Wert noch nicht zugewiesen wurde oder gleich false ist.

Zusammengesetzte Operatoren

Der zusammengesetzte Zuweisungsoperator bietet eine Kurzform zur Angabe einer häufig verwendeten Zuweisungsform. Mit dieser Technik lässt sich beispielsweise die Zuweisungsnotation verkürzen, bei der die Zielvariable als erster Operand auf der rechten Seite eines Ausdrucks verwendet wird.