Camping_RIDER: Variablendeklaration

Beitrag lesen

Aloha ;)

Mir ist in einem der Beispiele deines Artikels etwas aufgefallen, was auch in anderen Artikeln und auch Antworten hier im Forum immer wieder zu lesen ist, und was mir zumindest in dem Fall, dass es sich bei dem jeweiligen Adressaten um Anfänger handelt, als schlechte Praxis erscheint.

Ich würde das eher nicht als schlechte Praxis einordnen, und ich erklär dir auch warum :)

Bezogen auf dein Codebeispiel hätte diese falsche Annahme zwar keine Auswirkungen, aber ich halte es grundsätzlich für ratsam, sofern diesbezüglich keine zusätzlichen Erklärungen mitgeliefert werden und falls ein entsprechendes Beispiel sich auch an Anfänger richtet, dem Umstand Rechnung zu tragen, dass es in JavaScript für mittels var deklarierte Variablen neben dem globalen nur den durch den Ausführungskontext von Funktionen bereitgestellten Geltungsbereich gibt, weshalb ich es besser fände, wenn in Codebeispielen die lokalen Variablen gleich zu Beginn des Funktionskörpers deklariert und Konstrukte wie in deinem Beispiel vermieden würden.

Ich verstehe den Punkt, glaube aber, dass wir eine unterschiedliche Auffassung vom Begriff Anfänger haben.

Wenn wir vom allgemeinen Anfänger sprechen, dann kann ich von gar keinem Vorwissen ausgehen - außer den Grundlagen, die direkt für das Verständnis des Artikels notwendig sind. Da wir über einen Anwendungs- und Praxis-Artikel sprechen, kann ich (auch ohne weitere Erläuterungen) davon ausgehen, dass der Anfänger die Grundlagen von JavaScript, also insbesondere auch, wie var in JavaScript funktioniert, verstanden hat.

Du schreibst, dass ein Missverständnis auftreten könnte bezüglich des Geltungsbereichs von Variablen. Damit sind wir schon weg vom allgemeinen Anfänger (denn der hätte entweder überhaupt keine Vorstellung von Geltungsbereichen und damit kein Problem oder aber Geltungsbereiche in JavaScript schon verstanden und ergo auch kein Problem) und befinden uns bei einem JavaScript-Anfänger, der schon Ahnung von anderen gängigen Programmiersprachen (Java,C,...) und den dortigen Regeln bezüglich Sichtbarkeit von Variablen hat und gleichzeitig offenbar die Grundlagen von JavaScript nicht gelernt oder zumindest nicht verstanden hat - denn die Deklaration von Variablen und deren resultierende Sichtbarkeit ist Grundlagenwissen.

Und ja, ich gebe dir Recht, in dem Fall könnte es zu einem Missverständnis kommen.

Es gibt für dieses Missverständnis allerdings mMn keine gangbare Lösung - außer den Standpunkt RTFM. Es ist nicht gangbar, zu jedem Beispiel, das außerhalb der Grundlagenkapitel steht, eine Erklärung zu allen verwendeten oder vorkommenden Grundlagen zu schreiben.

Die Alternative, die du vorschlägst (wenn ich dich richtig verstanden habe)

function () {
  var i, foo;
  if (condition) {
    foo = bar;
    for (i = 0; i < baz; i++) {
      // do something
    }
  }
}

wäre zwar auch möglich und würde diese Verwechslungsgefahr beheben, ist aber vom reinen JavaScript-Standpunkt aus mMn nicht begründbar.

Ich halte es sogar für Anfänger sogar für mindestens genauso schädlich, weil dadurch das Missverständnis aufkommt, var in JavaScript sei sowas wie int in Java, nur ohne Typunterscheidung - die Anfänger, um die es hier geht, werden also nicht zum Nachdenken angeregt, sondern noch eher in ihrem Unverständnis bestätigt. Tatsächlich ist es ja nicht der Sinn von var eine Variable zu deklarieren (wenn man deklarieren wie in anderen Sprachen versteht), sondern viel eher, sicherzustellen, dass sich die Variable (die gar nicht deklariert werden muss) im aktuellen Kontext befindet. Quasi das Gegenteil eines global in PHP, nur mit Folgen für den gesamten Kontext.

Das ist doch gerade der Vorteil: Ich muss mich in JavaScript nicht um eine Deklaration kümmern, und wenn ich an einer konkreten Stelle im Code eine "lokale" (soweit das in JavaScript möglich ist) Variable verwenden will, schreibe ich ein var, damit keine globale Variable herangezogen wird. Das kann ich im Zweifelsfall in jeder Zeile code tun - was mir nicht möglich wäre, wenn var tatsächlich eine Deklaration wäre.

TL;DR: Dein Vorschlag würde bedeuten var wie eine Variablendeklaration zu benutzen, was var nicht ist, und damit eher Unverständnis besiegeln als Missverständnisse beseitigen.

Insbesondere sollte JavaScript mit den einzigartigen Möglichkeiten und Konzepten von JavaScript im Hinterkopf programmiert werden - und nicht mit den Konzepten von Java/C/... im Hinterkopf ;) So hat halt jede Sprache ihre Besonderheiten - und das zu kenntlich zu machen sollte mit ein pädagogisches Ziel sein, nicht es zu verschleiern ;)

Grüße,

RIDER

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
1 55

Info: neuer Artikel zum Checkbox-Hack

Camping_RIDER
  • css
  • selfhtml-wiki
  • zur info
  1. 0
    Matthias Scharwies
  2. 0
    Gunnar Bittersmann
    1. 0
      Camping_RIDER
      1. 0
        Matthias Apsel
        1. 0
          Camping_RIDER
      2. 0
        Gunnar Bittersmann
        1. 0
          Camping_RIDER
          1. 0
            Gunnar Bittersmann
    2. 0
      Camping_RIDER
      1. 1
        Gunnar Bittersmann
        • html
        • selfhtml-wiki
        • zur info
        1. 0

          IE6-Warnung gefällig?

          Camping_RIDER
          1. 2
            Christian Kruse
            1. 0
              Auge
              • browser
              • html
              • selfhtml-wiki
              1. 0
                Christian Kruse
                1. 0
                  Auge
                  1. 0
                    Christian Kruse
                    1. 0
                      Auge
                      • browser
                      • selfhtml-wiki
                      1. 0
                        Christian Kruse
                      2. 0
                        Camping_RIDER
                        1. 0
                          Auge
                          • browser
                    2. 1
                      JürgenB
                      1. 0
                        Christian Kruse
            2. 0
              Camping_RIDER
          2. 0
            Jörg Reinholz
            1. 0
              Auge
              • browser
              • mobile
              1. 0
                marctrix
            2. 0
              Der Martin
              1. 0
                marctrix
                1. 0
                  Der Martin
                  1. 0
                    marctrix
                    1. 0
                      Der Martin
                      1. 0
                        marctrix
                        1. 0
                          Der Martin
                          1. 0
                            marctrix
                          2. 1

                            Spaß mit Siri

                            Gunnar Bittersmann
                            • humor
                            1. 0
                              marctrix
                              1. 0
                                Tabellenkalk
                                1. 0
                                  marctrix
            3. 0
              marctrix
    3. 1

      Polyfill - erster Versuch

      Camping_RIDER
      1. 0
        Matthias Apsel
        1. 0
          Camping_RIDER
      2. 0

        Bugfix jetzt im Artikel

        Camping_RIDER
  3. 0
    marctrix
  4. 0

    Verrückter Bug oder meine Blindheit?

    Camping_RIDER
    • bug
    • css
    • selfhtml-wiki
  5. 1

    Variablendeklaration

    Orlok
    • javascript
    1. 0
      Camping_RIDER
      1. 0
        Orlok
        1. 0
          Camping_RIDER
        2. 0
          dedlfix
    2. 0
      dedlfix
      1. 0
        Camping_RIDER
        1. 0
          dedlfix
          1. 0
            Camping_RIDER