Rolf b: Alternative zu eval() für arithmetische Berechnungen

Beitrag lesen

problematische Seite

Die möglichen Operatoren in einem Array speichern?

var operators = ['plus', 'minus', 'div', 'mal'];

Das, und dazu noch die Operatoren in einem OBJEKT speichern und Methoden zuordnen? Ich verwende mal nur "klassische" Syntax. Alle Methoden tun das gleiche: sie bekommen a und b und liefern ein Objekt zurück, in dem das darzustellende Symbol und das erwartete Ergebnis stehen.

var randomOps = [ 'plus', 'minus', 'mal', 'div' ];
var opMap = {
   'plus': function(a,b) { return { symbol: '+', erwartet: a+b; } },
   'minus': function(a,b) { return { symbol: '-', erwartet: a-b; } },
   'mal': function(a,b) { return { symbol: '*', erwartet: a*b; } },
   'div': function(a,b) { return { symbol: '/', erwartet: a/b; } },
   'random': function(a,b) {
                var op = rand(0, randomOps.length);
                return opMap[randomOps[op]](a,b);
             }
};

var a = rand(1,9), 
    b = rand(1,9),
    operator = document.querySelector('input[name="op"]:checked').id,
    handler = opMap[operator];

if (!handler) { /* Error */ }
   
var opInfo = handler(a,b);
document.querySelector('#operator').textContent = opInfo.symbol;
ergebnis = opInfo.erwartet;

Auf diese Weise holt man sich direkt die Auswertefunktion aus dem Dictionary und braucht keinen Switch mehr. Random ist auch nur eine Funktion, die sich einfach der anderen Dictionary-Einträge bedient.

Zu abstrakt? Oder ok?

Rolf

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