Matthias Scharwies: "use strict"; empfehlenswert oder nicht?

Hallo,

ich habe 2012 in einem VHS-Kurs gelernt, immer "use strict"; zu verwenden.

Peter Kroener war sich 2011 noch nicht so sicher. Gerade für ältere Browser - siehe Caniuse gibt es wohl auch heute noch Fallstricke.

Seine Empfehlung, es zum Entwickeln und Testen zu verwenden, dann aber herauszunehmen, klingt logisch.

A. Wie ist eure Meinung?

B. Verwendet Ihr es?

C. Sollen es Anfänger verwenden, um besseren Code zu schreiben?

Für (hoffentlich viele) Rückmeldungen danke ich im Voraus!

LG Matthias

  1. hi,

    Seine Empfehlung, es zum Entwickeln und Testen zu verwenden, dann aber herauszunehmen, klingt logisch.

    Ja, vor allem, wenn es viel Legacy-Code gibt, der sehr zeitaufwändig restauriert werden müsste.

    A. Wie ist eure Meinung?

    Als Perl-Programmierer habe ich mir die Frage "use strict" vor etwa 13 Jahren zum Letzenmal gestellt, seither ist das die erste Anweisung, die ich stets einbinde. Ein Vertipper ist schnell mal drin und dann läuft die Zeit bei der Fehlersuche weg, wenn z.B. $smtp statt $snmp rein optisch nicht gleich auffällt.

    Use strict führt dazu, dass Fehler beim Entwickeln früher erkannt werden und zu mehr Disziplin was insbesondere dann wichtig ist, wenn Code aus der Hand gegeben oder in Teamarbeit entwickelt wird. So wirst Du auf CPAN wohl kaum ein Modul finden, was das Pragma strict nicht verwendet und auch in neueren JS-Libraries sehe ich das immer öfter.

    B. Verwendet Ihr es?

    In JS noch nicht durchgängig.

    C. Sollen es Anfänger verwenden, um besseren Code zu schreiben?

    Betr. Perl: Klares Ja, es hilft beim Debuggen, spart Zeit und führt dazu, sich mehr Gedanken um den Geltungsbereich von Variablen zu machen und letztendlich zu einer besseren Strukturierung und Kapselung. Sinngemäß würde ich das auch auf JS anwenden.

    MfG

    1. Seine Empfehlung, es zum Entwickeln und Testen zu verwenden, dann aber herauszunehmen, klingt logisch.

      Nein, im Gegenteil. Der Strict Mode schickt, sofern der Browser(mittlerweile weitgehend unterstützt, der Artikel ist von 2011!) ihn unterstützt, die JS-Engine in einen anderen Modus. Es wäre geradezu hirnrissig, hier in der Entwicklung bewusst eine andere Plattform als im Produkbetrieb zu wählen. Das Argument "es könnte ja einen Fehler im Strict Mode geben" ist wenig stichhaltig, die JS-Engine kann auch ohne Strict Mode seitens der Browserhersteller einen Bug enthalten.

      Ja, vor allem, wenn es viel Legacy-Code gibt, der sehr zeitaufwändig restauriert werden müsste.

      Häh? "use strict" gehört in den passenden Scope, darüber habe ich als Entwickler komplette Kontrolle. Wer das global setzt, ist selbst schuld.

      A. Wie ist eure Meinung?

      Bei Neuentwicklungen konsequent einsetzen.

      1. hi,

        Ja, vor allem, wenn es viel Legacy-Code gibt, der sehr zeitaufwändig restauriert werden müsste.

        Häh? "use strict" gehört in den passenden Scope, darüber habe ich als Entwickler komplette Kontrolle. Wer das global setzt, ist selbst schuld.

        Ich fänds toll, wenn Du hierzu ein bischen mehr Kompetenz zeigen könntest und gerade die Sache mit dem Scope etwas näher erklären würdest.

        MfG

        1. Ich fänds toll, wenn Du hierzu ein bischen mehr Kompetenz zeigen könntest und gerade die Sache mit dem Scope etwas näher erklären würdest.

          Kompetenz überlasse ich den Profis. Beispiel zum Thema Scope.

  2. Dein Code wird strenger behandelt und es werden mehr Fehler geworfen. Das klingt für mich danach, dass es mehr Laufzeit braucht. Also würde ich es nur zum testen und entwickeln einsetzen, dann jedoch global.

    Gruß
    strikter
    T-Rex

    1. Dein Code wird strenger behandelt und es werden mehr Fehler geworfen. Das klingt für mich danach, dass es mehr Laufzeit braucht.

      Klingt vielleicht so, ist aber falsch. Schlimmenstenfalls ändert sich nichts, bestenfalls wird es schneller.

      Also würde ich es nur zum testen und entwickeln einsetzen,

      Nein. Der Strict Mode hat auch Auswirkungen zur Laufzeit(z.B. eval, this/window), warum sollte man sich bewusst einen solchen Fallstrick zwischen Entwicklungs- und Produktionsbetrieb einfangen wollen? Lust auf Schmerz?

      dann jedoch global.

      Neeeein! Warum? Ebenfalls Lust auf Schmerz?

      1. Mahlzeit,

        Neeeein! Warum? Ebenfalls Lust auf Schmerz?

        Du wiederholst lediglich deine Aussage. Eine Begründung wäre schön. Bisher nutze ich noch kein use strict in JS, interessiere mich aber für Infos aus erster Hand :)

        --
        42
        1. Du wiederholst lediglich deine Aussage.

          Nicht ganz, der genannte Link war schon neu.

          Eine Begründung wäre schön. Bisher nutze ich noch kein use strict in JS, interessiere mich aber für Infos aus erster Hand :)

          Auf die konkrete Fragestellung: den Compiler global in den Strict Mode zu schicken ist keine gute Idee, weil evtl. nachfolgend in der Seite eingebundene JS-Ressourcen vielleicht nicht mit diesem kompatibel sind.

          1. Mahlzeit,

            Nicht ganz, der genannte Link war schon neu.

            Der ist schon neu, du hattest aber dein anderen Post hier in Thread verlinkt

            Auf die konkrete Fragestellung: den Compiler global in den Strict Mode zu schicken ist keine gute Idee, weil evtl. nachfolgend in der Seite eingebundene JS-Ressourcen vielleicht nicht mit diesem kompatibel sind.

            Stimmt, das macht Sinn. Ich dachte, der Strict-Mode gilt nur für das Script selbst. Wieder was gelernt :)

            --
            42
            1. Om nah hoo pez nyeetz, M.!

              Der ist schon neu, du hattest aber dein anderen Post hier in Thread verlinkt

              Ich habe, um vor derlei Überraschungen etwas gefeit zu sein folgendes in meinem Userstylesheet

              .nachricht-text a[href*='forum.de.selfhtml.org/my/']::after {  
              	content: " (F)";  
              }  
              .nachricht-text a[href*='forum.de.selfhtml.org/archiv/']::after {  
              	content: " (A)";  
              }  
              .nachricht-text a[href*='community.de.selfhtml.org'][href*='zitatesammlung']::after {  
              	content: " (Z)";  
              }  
              .nachricht-text a[href*='wiki.selfhtml.org']::after {  
              	content: " (W)";  
              }
              

              Matthias

              --
              Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Nickel und Nickelodeon.

              1. @@Matthias Apsel:

                nuqneH

                [code lang=css].nachricht-text a[href*='forum.de.selfhtml.org/my/']::after {
                content: " (F)";
                }

                Ich werd meine Beispiele demnächst unter bittersmann.de/forum.de.selfhtml.org/my/ tun. ;-)

                Warum '*=' und nicht '^='?

                Qapla'

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                1. Om nah hoo pez nyeetz, Gunnar Bittersmann!

                  Ich werd meine Beispiele demnächst unter bittersmann.de/forum.de.selfhtml.org/my/ tun. ;-)

                  Bösewicht!

                  Warum '*=' und nicht '^='?

                  Weiß ich nicht mehr so genau. Ursprünglich wohl wegen http/https.

                  Matthias

                  --
                  Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Balsa und Balsam.

                  1. Hi,

                    Om nah hoo pez nyeetz, Gunnar Bittersmann!

                    Ich werd meine Beispiele demnächst unter bittersmann.de/forum.de.selfhtml.org/my/ tun. ;-)

                    Bösewicht!

                    sozusagen Gunnar Bösersmann ;-)

                    cu,
                    Andreas

                    --
                    Warum nennt sich Andreas hier MudGuard?
                    O o ostern ...
                    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          2. Hi,

            den Compiler global in den Strict Mode zu schicken ist keine gute Idee

            Deshalb ist es auch gar nicht möglich. Es gibt keinen globalen strict mode. 'use strict' gilt immer für ein <script> bzw. für einen function scope und nested functions.

            Nico

  3. Vielen Dank für Euer feedback,

    ich habe es im wiki eingebaut:
    wiki/JavaScript/strict_mode

    und stehe jetzt bei arguments auf dem Schlauch:
    http://wiki.selfhtml.org/wiki/JavaScript/strict_mode#arguments

    Eine Google-Suche hat mich schon darauf gebracht, dass arguments.caller (und bald wohl auch  arguments.callee) nicht mehr unterstützt werden.

    http://www.peterkroener.de/ecmascript-5-die-nachste-version-von-javascript-teil-2-der-strict-mode/
    http://msdn.microsoft.com/de-de/library/ie/gg622933(v=vs.85).aspx

    arguments_innerhalb_einer_Funktion

    Würdet ihr anstelle von arguments generell array einsetzen?

    Für feedback und Anregungen bin ich immer dankbar!

    LG Matthias