dedlfix: Was bewirkt ein Dollarzeichen mit geschweifter Klammer um Array?

Beitrag lesen

Hi!

Optionale Zeichen haben keinen Einfluss auf das Ergebnis der Syntaxanalyse seitens des Parsers, sind also syntaktisch bedeutungslos. Ihr Wert für die Verständlichkeit des Codes ist meistens als gering einzuschätzen. Sie nur der Gewohnheit willen zu notieren, halte ich für keinen guten Grund.

Das sehe ich nicht so. Wenn ich mir angewöhne, eine Anweisung in PHP (Javascript, C) *immer* mit einem Semikolon abzuschließen, mach ich mir das Leben leichter, als wenn ich erst überlege, ob ich es an einer bestimmten Stelle nicht auch weglassen könnte.

Gerade Javascript wartet da mit recht gemeinen Eigenheiten auf, wenn man sich blind darauf verlässt, dass ein Semikolon eine Anweisung beendet. Denn Javascript ist es egal, ob da aus Versehen oder mit Absicht ein Semikolon fehlt oder vielleicht eine ganz andere Absicht hinter einem Konstrukt steckt.

function foo() {
    return
      42;
  }

Der Rückgabewert der Funktion lautet? "undefined". Hä? Warum nicht 42? Ist doch syntaktisch fehlerfrei und ein Semikolon ist auch da. - Das Semikolon schließt jedoch nicht das "return 42" ab sondern nur die "42". Das "return" ist bereits am Zeilenende implizit abgeschlossen. Semikolon war da, trotzdem auf die Nase gefallen. Das Wissen um die Optionalität ist hier wichtiger als eine Angewohnheit. In diesem Beispiel darf die 42 einfach nicht in der nächsten Zeile stehen, Semikolon hin oder her.

Ein anderes Beispiel ist die Geschichte mit den Zahlen in SQL-Statements. Ein gewohnheitsmäßig angewendetes mysql_real_escape_string() lässt die Tür offen, für die es der Autor vorgesehen hatte.

Oder (Situation: PHP, innerhalb einer Funktion):

return ($variable);

Die Klammern sind hier optional, in anderen Situationen sind sie Pflicht, manchmal helfen sie einfach nur beim Vermitteln der Intention, werden aber wegen der Operatoren-Rangfolge eigentlich gar nicht gebraucht. Also kann es ja wohl nicht schaden, sie immer und auch hier zu notieren. Das geht auch solange gut, bis man mal nicht nur einen Wert sondern eine Referenz zurückgeben will, was durch die Klammern wirksam verhindert wird.

Wegen solcherlei Fallstricken bin ich kein Fan von sturer Regelanwendung. Das Wissen ist wichtig, nicht stur gelernte und nicht hinterfragte Regeln.
Mit genügend Erfahrung weiß man, wann man auf etwas optionales verzichten kann, wann es besser ist, das zu tun, und wann man sich eine Regelübertretung nicht erlauben darf. Diese Erfahrung muss man aber erst einmal sammeln, wozu ein gezieltes Regelverlassen notwendig ist. (Nicht zu verwechseln mit dem Sich-Auf-Eine-Regel-Verlassen.)

Und nächste Woche erweitere ich mein Script, und das einst optionale Semikolon ist plötzlich nicht mehr optional.

Ja, und? Verstand ausgeschaltet beim Erweitern? Wenn nicht sollte es doch kein gravierendes Problem sein, das eine poplige Zeichen hinzuzufügen. Wem solch ein Fehler nicht spätestens beim Testen auffällt, sollte sich fragen, wie er seine Programmierfähigkeiten verbessern kann.

Zugegeben, in dem Fall wird man durch einen Parse Error sofort darauf gestoßen - aber warum sollte ich erst den Grundstein für einen zukünftigen Fehler legen, den ich durch konsequentes Nicht-Ausnutzen eines Freiheitsgrades von vornherein vermeiden könnte?

Weil du, wenn du es richtig machen willst, im Prinzip genausoviel Aufwand in das Überprüfen der Richtigkeit einer Angewohnheitshandlung stecken müsstest wie in das Finden der am besten zur Situation passenden Lösung. Erfahrung hilft, sich schnell für den "richtigen" Weg entscheiden zu können. Erfahrung sollte aber nicht mit Scheuklappen verwechselt werden, finde ich.

Um sowas zu notieren, muss man aber schon in einem fortgeschrittenen Stadium geistiger Abwesenheit sein

Ich hoffe, du beziehst das nicht auch auf die Notation von Beispielen :-)

Deswegen empfehle ich ja auch nicht, aus Gewohnheit am Ende jeder Zeile ein Semikolon zu setzen, sondern am Ende jeder Anweisung.

Klappt nur nicht in jedem Fall für Javascript. Schon versagt deine Gewohnheit.

[...]
Ich bin deswegen durchaus dafür, dass man sich durch konsequente Anwendung von Gewohnheiten das Leben leichter macht.

Das Problem ist nur, dass man leicht was übersehen kann, wenn man sich auf die Gewohnheiten verlässt, jedoch in Situationen kommt, in denen sie halt nicht passen und das nicht mitbekommt. Deswegen bin ich dafür, den Verstand immer eingeschaltet zu lassen - auch bei den gewöhnlichen Dingen. Oder anders gesagt: sich zur Regel zu machen, Regeln immer zu hinterfragen.

Lo!