1unitedpower: Alternative zu eval() für arithmetische Berechnungen

Beitrag lesen

problematische Seite

Eine Sache ist mir erst nachträglich aufgefallen: Es ist schlechter Stil, vielleicht sogar ein Bug, dass die Methoden in opMap sich auf die Variable beziehen, in der ihr Objekt gespeichert ist. Statt dessen sollten sie this verwenden.

Das ist kein Fehler, das ist ein rekursiver Closure und in JavaScript durchaus auch üblich. Das ist sogar der bessere Stil, weil es besser vorherzusehen ist, wie sich so ein Programm verhält. Wir können ja mal ein kurzes Experiment starten: Was ist wohl die Ausgabe des folgenden Codes (die Lösung ganz am Ende des Posts)

const math = {
  fac(x) {
    return (x > 1)
      ? x * math.fac(x - 1)
      : 1;
  }
};

math.fac(1);
math.fac(3);
math.fac(5);
math.fac.call({fac(){return 170}}, 1);
math.fac.call({fac(){return 170}}, 3);
math.fac.call({fac(){return -35}}, 3);
math.fac.call({fac(){return NaN}}, 5);
math.fac.call(null, 5);

Und was wäre die Ausgabe, wenn math.fac intern this verwenden würde? Also wie folgt definiert wäre:

const math = {
  fac(x) {
    return (x > 1)
      ? x * this.fac(x - 1)
      : 1;
  }
};
Lösung:






















Ohne this: 1, 6, 120, 1, 6,   6   , 120, 120
Mit this:  1, 6, 120, 1, 510, -105, NaN, Type Error

Bei der ersten Variante hängt das Verhalten nicht vom Aufruf der Funktion ab, sondern ausschließlich von ihrer Definition. Im zweiten Fall hängt das Verhalten von der Definition und dem Aufruf der Funktion ab. Es kommt also eine Laufzeit-Abhängigkeit ins Spiel und das macht es schwierig den Code zu verstehen.

0 52

Alternative zu eval() für arithmetische Berechnungen

Matthias Scharwies
  • javascript
  1. 0
    Gunnar Bittersmann
    1. 1
      Rolf b
      1. 1
        Felix Riesterer
        1. 1
          Gunnar Bittersmann
      2. 0
        Matthias Scharwies
        1. 2
          Rolf b
          • javascript
          • programmiertechnik
          1. 0
            Matthias Scharwies
            1. 0
              Rolf b
              1. 0
                Camping_RIDER
                • humor
                • menschelei
          2. 1
            1unitedpower
            1. 0
              Rolf b
              1. 0
                1unitedpower
                1. 0
                  Rolf b
                  1. 0
                    1unitedpower
        2. 0
          JürgenB
          1. 1
            Christian Kruse
            1. 0
              JürgenB
              1. 0
                Christian Kruse
  2. 0
    Tabellenkalk
    1. 0
      Gunnar Bittersmann
  3. 0
    pl
    1. 0
      Gunnar Bittersmann
    2. 0
      Rolf b
      1. 1
        pl
        • javascript
        • programmiertechnik
        1. 0
          TS
          1. -1
            pl
            1. 0
              TS
              1. 0
                Tabellenkalk
                1. 0
                  TS
              2. 0
                pl
                1. 0
                  TS
                  1. -2
                    pl
                    • javascript
                    • programmiertechnik
                    • zu diesem forum
                    1. 0
                      Gunnar Bittersmann
                      • zu diesem forum
  4. 1
    Matthias Apsel
    1. 0
      Matthias Scharwies
      1. 2
        JürgenB
      2. 0
        Rolf b
  5. 0
    TS
    • javascript
    • programmplanung
    1. 0

      Mathe-Quiz - Aufgabenstellung zusammengefasst

      Matthias Scharwies
      1. 0

        Mathe-Quiz - aufgabenstellung zusammengefasst

        Matthias Apsel
        1. 0
          dedlfix
          1. 0
            Matthias Apsel
          2. 0

            Mathe-Quiz - für welche Schüler?

            Matthias Scharwies
      2. 0

        Mathe-Quiz 0.3 (läuft)

        Matthias Scharwies
        1. 0
          TS
          1. 0
            Gunnar Bittersmann
            1. 0
              Tabellenkalk
              1. 0
                JürgenB
                1. 0
                  Gunnar Bittersmann
                2. 0
                  TS
        2. 0
          Tabellenkalk
          • javascript
          • programmplanung
          • rechnen