Tach!
Jedenfalls, du wirst lachen, erinnere ich mich noch gut, dass es bei mir selbst, als jemand der tatsächlich mit JavaScript angefangen hat zu Programmieren, durchaus eine Phase gab, in der ich zwar verstanden hatte, dass eine ohne das Schlüsselwort
var
deklarierte Variable global sichtbar wird, so dass man von überall auf sie zugreifen kann, ich aber dennoch zum Beispiel solchen Code geschrieben habe…function z (x, y) { for (var i = 0; i < x; i++) { // ... } for (var i = 0; i < y; i++) { // ... } }
In so einem (und in so manchem anderen) Fall helfen die Assistenzsysteme einer IDE hervorragend, weil sie dich mit der Nase draufstoßen, dass da was nicht in Ordnung ist. "Variable i mehrfach deklariert" (oder so ähnlich) bekommt man da erzählt.
function () { var i, foo; if (condition) { foo = bar; for (i = 0; i < baz; i++) { // do something } } }
Und in dem Beispiel sollte dem aufmerksamen Programmierer auffallen, dass die IDE foo und bar unterschiedlich darstellt. Vorausgesetzt, es wurde global ein var bar
notiert, sonst gibts deutlicheres Gemecker über die lokale Verwendung einer nicht global mit var bekanntgemachten Variable.
Wenn ich aber sowas gelesen hätte, wäre mir dieses Missverständnis wahrscheinlich erspart geblieben, denn auch wenn dieses konkrete Beispiel isoliert betrachtet vielleicht nicht genügt hätte um meine Aufmerksamkeit zu wecken, hätte ich mich bei wiederholter Konfrontation mit dieser Art der Notation doch sicherlich gefragt, warum diese Deklarationen ohne Wertzuweisung am Anfang der Funktion vorgenommen werden und ich wäre so vermutlich schon früher auf des Rätsels Lösung gestoßen.
Spekulatius schmecken gut, aber der Arten, etwas falsch zu verstehen, gibt es nicht nur eine. Vielleicht hättest du auch gedacht, dass der Autor einfach nur Variablen wiederverwendet und dann deinerseits beschlossen, dass du sie doch lieber nur lokal hältst, weil das ihren Einsatzbereich nicht so weit auseinanderreißt. Tja, wenn es let
schon seit Anfang an gegeben hätte, wäre man eher auf die Eigenheiten von var
aufmerksam geworden. Oder man hätte es als gleichwertiges Synonym fehlaufgefasst. Oder ...
Um an dieser Stelle mal ein Zitat einzuwerfen: „Programs that appear to do one thing but actually do another are much harder to get right.“ [Douglas Crockford]
Wer sich vom Schein blenden lässt, rennt vermutlich auch bei trüben Wetter mit Sonnenbrille rum ;) Wer nur aus dem Bauch heraus programmieren will, um seinen Kopf nicht zu sehr anzustrengen, hat es nicht besser verdient. Dumm nur, dass unter den aus den Fehlannahmen entstehenden Fehlern die Anwender der Produkte nicht selten in Mitleidenschaft gezogen werden. Manchmal braucht es erst eine Menge Skandale, damit man merkt, dass da was grundsätzlich schief läuft. Und selbst dann wachen einige erst dann auf, wenn sie selbst das Opfer ihrer eigenen Laxheit oder Ignoranz werden.
Was ich damit sagen will ist, dass [...] führen kann, dass [...] angenommen wird [...], der Umstand verschleiert wird [...]
Du kannst an der Stelle gern mit gutem Beispiel vorangehen, aber das gibt noch lange keine Garantie, dass der geneigte Leser dies dann auch erkennt und wie gewünscht wahrnimmt. Man kann das auch völlig unaufmerksam übergehen und seinerseits Fehler einbauen. Ich denke, da hilft nur eine generelle Aufklärung, die dann aber an anderer Stelle erfolgen muss, weil sie das eigentliche Thema sprengt. Der Mensch lernt einen nicht unerheblichen Teil aus selbst gemachten Fehlern. Das setzt sich teilweise besser in der Erinnerung fest, als etwas, das man einfach mal so zufällig gelesen hat.
Anderes Beispiel: Du kannst so oft Nebenwirkung sagen, wo andere die falsche Übersetzung Seiteneffekt nehmen und trotzdem wirst du allein damit das eigentliche Zielpublikum nicht erreichen, weil viele für diese Feinheiten blind sind. Seiteneffekt ist ein Wort, das man sofort versteht oder aus dem Kontext ableiten kann, was der Autor damit sagen will. Das fühlt sich also nicht unbedingt verkehrt an, und insofern habe ich wenig Hoffnung, dass du allein durch die richtige Verwendung von Nebenwirkung als Nebenwirkung einen Lerneffekt erzielen wirst. Eher wird sich das Wort Seiteneffekt einbürgern und sich die Konnotation festigen, dass Nebenwirkung was negatives ist und Seiteneffekt etwas eher postives oder neutrales beschreibt.
Zusammengefasst: Gute Beispiele sind gut, aber ergeben leider noch lange nicht den nebenher gewünschten Lerneffekt.
dedlfix.