Hallo Auge,
das ist irgendwie schwierig.
"Klassisch" unterscheidet man Statements (Anweisungen) und Expressions. Statements ändern was am System oder lösen Aktionen aus, Expressions berechnen was und ändern nichts.
Aber so klassisch war es nie wirklich, und es wurde immer weiter aufgeweicht. Man fasste Statements zu Prozeduren zusammen. Man erfand Funktionen, die einen Wert haben und als Teil einer Expression verwendbar sind. Man vermischte Prozeduren und Funktionen, indem man in Funktionen Statements ausführte, die etwas am System ändern und damit Nebenwirkungen haben.
Und dann kam C das mit dem Zuweisungsoperator die Nebenwirkung zum Prinzip erhob, sowie die Prozedur abschaffte und alles Funktion nannte.
In C- und seinen Abkömmlingen ist es eher so, dass Statements etwas deklarieren bzw. definieren, oder den Programmfluss steuern. Alles andere sind Operatoren oder Aufrufe von Funktionen der Laufzeitumgebung. Wie man es aus Assembler eben kennt.
Die Folge ist, dass jeder Ausdruck das Potenzial für Nebenwirkungen hat. Er kann Variablen verändern (per Zuweisung oder In-/Dekrement) oder durch Funktionsaufrufe beliebige Aktionen anstoßen.
D.h. für ein gutes Programm braucht man Disziplin und muss darauf achten, dass Ausdrücke entweder etwas ermitteln und damit nebenwirkungsfrei sind, ODER etwas auslösen. Der Zuweisungsoperator steckt irgendwie dazwischen, weil er ja einen Wert ermitteln und dann durch die Zuweisung das System verändern muss. Hier sollte darauf geachtet werden, dass man Zuweisungen nicht dort versteckt, wo eigentlich nur ein Wert erwartet wird.
Dinge wie while ($row = $db->fetch())
sind gängige Praxis, de facto aber ein Verstoß gegen gute Programmstruktur und fallen einem in Form von if ($a = 3)
auf die Füße.
Wie man das in einen Basisartikel über Anweisungen packt, ohne zu sehr in die Breite zu gehen, ist eine spannende Frage… Wer sich eine bessere Form des Artikels vorstellen kann, darf gerne einen Entwurf in seinem Benutzernamensraum des Wiki vorbereiten und vorstellen (einfach als Lemma so etwas wie Benutzer:Hugo/Anweisungen
verwenden).
Rolf
sumpsi - posui - obstruxi