Florian: Taschenrechner..

Ich habe im Internet einen Taschenrechter gefunden aber ich verstehe den Javascriptcode noch nicht so richtig(bin ein Anfänger)

  
  <script type='text/javascript'>  
  function Ergebnis()  
 {  
   var x = 0;  
   x = eval(document.Rechner.Textfeld.value);  
   document.Rechner.Textfeld.value = x;  
 }  
 function Hinzufuegen(Zeichen)  
 {  
  document.Rechner.Textfeld.value =  
  document.Rechner.Textfeld.value + Zeichen;  
 }  
 </script>

Ich habe 2 Fragen zu dem Code wieso setzt man document.Rechner.Textfeld.value mit document.Rechner.Textfeld.value + Zeichen; gleich?
Und wieso wird x mit 0 deffinert?

Liebe Grüße Florian

  1. Hi,
    also diese Zeile:

      
    document.Rechner.Textfeld.value =  
      document.Rechner.Textfeld.value + Zeichen  
    
    

    ist eigentlich was ganz simples. Das Konzept dahinter wird von praktisch jeder Programmiersprache unterstützt.
    Diese Codezeile ist sowas wie eine Gleichung. Auf der linken Seite steht deine Variable, der du einen Wert zuweisen möchtest. Auf der rechten Seite steht genau dieser Wert.

    Das Ganze passiert aber parallel. DU liest also den Wert des Textfeldes aus, addierst die Variable Zeichen und speicherst diesen Wert wieder im value-Wert deines Textfeldes.

    Mfg Mo3bius

    1. @@Mo3bius:

      nuqneH

      document.Rechner.Textfeld.value =
        document.Rechner.Textfeld.value + Zeichen

      ist eigentlich was ganz simples.

      Und um es – je nach Auge des Betrachters – komplizierter oder noch simpler zu machen, gibt es dafür die verkürzte Schreibweise

      document.Rechner.Textfeld.value += Zeichen;

      Das Konzept dahinter wird von praktisch jeder Programmiersprache unterstützt.

      Auch das.

      Diese Codezeile ist sowas wie eine Gleichung.

      Nein.

      […] zuweisen […]

      Eben.

      Das Ganze passiert aber parallel. DU liest also den Wert des Textfeldes aus, addierst die Variable Zeichen und speicherst diesen Wert wieder im value-Wert deines Textfeldes.

      Auslesen, Addieren, Zuweisen geschieht nacheinander. Nicht parallel.

      Und wo du das „DU“ so betonst: Nein, ich addiere nicht. Dafür hab ich doch einen Computer! ;-)

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  2. Ach ja,
    hier nochmal einen guten Link für beide Fragen:

    http://de.wikipedia.org/wiki/Variable_%28Programmierung%29

    Mfg Mo3bius

  3. Hi,

    Ich habe im Internet einen Taschenrechter gefunden aber ich verstehe den Javascriptcode noch nicht so richtig(bin ein Anfänger)

    Du bist offenbar Programmieranfänger - denn Du scheinst Programmierung mit Mathematik zu verwechseln.

    var x = 0;

    Dies ist keine Definition, sondern eine Deklaration mit einer Zuweisung (Initialisierung). Der Code ist keine Tatsachenbeschreibung, sondern etwas, das ausgeführt wird. "Es werde x, und x sei 0. Und ich sah, dass es gut war."

    x = eval(document.Rechner.Textfeld.value);

    Wenn Du auf einen Programm-Code stößt (egal in welcher Sprache), der "eval" enthält, so betrachte ihn bis zum Beweis des Gegenteils als hundsmiserabel.

    Ich habe 2 Fragen zu dem Code wieso setzt man document.Rechner.Textfeld.value mit document.Rechner.Textfeld.value + Zeichen; gleich?

    Zuweisung, nicht Gleichsetzung.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Lieber Cheatah,

      x = eval(document.Rechner.Textfeld.value);

      Wenn Du auf einen Programm-Code stößt (egal in welcher Sprache), der "eval" enthält, so betrachte ihn bis zum Beweis des Gegenteils als hundsmiserabel.

      es ist in Sachen Taschenrechner sicherlich eine faule (=bequeme) Lösung, aber wie würdest Du einen komplexen mathematischen Term ohne eval schnell und einfach parsen wollen?

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Hi,

        es ist in Sachen Taschenrechner sicherlich eine faule (=bequeme) Lösung, aber wie würdest Du einen komplexen mathematischen Term ohne eval schnell und einfach parsen wollen?

        ich würde es nicht schnell und einfach parsen wollen.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Mit einem lexikalischen Parser, wie sonst? Dazu würde man zunächst ein Array erzeugen, in dem man einen RegExp-Split über die Parameter vornimmt (also bspw. value.split(/(+-\*/())/) und das Ergebnis solange nach dem jeweils höherwertigsten Operator durchgeht, bis man keine Operatoren mehr überhat und somit nur noch eine Zahl übrig bleiben sollte.

        Gruß, LX

        --
        RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
        RFC 1925, Satz 11a: Siehe Regel 6a
        1. Hallo,

          Wenn Du auf einen Programm-Code stößt (egal in welcher Sprache), der "eval" enthält, so betrachte ihn bis zum Beweis des Gegenteils als hundsmiserabel.

          Da ist er auch schon:

          zunächst ein Array erzeugen, in dem man einen RegExp-Split über die Parameter vornimmt (also bspw. value.split(/(+-\*/())/) und das Ergebnis solange nach dem jeweils höherwertigsten Operator durchgeht, bis man keine Operatoren mehr überhat und somit nur noch eine Zahl übrig bleiben sollte.

          Und wenn sie nicht gestorben sind, regächtzen sie noch heute...

          Gruß, Don P

        2. Hallo LX,

          Mit einem lexikalischen Parser, wie sonst? ...

          d.h. du schreibst dir ein eigenes abgespecktes eval.

          Gruß, Jürgen

    2. x = eval(document.Rechner.Textfeld.value);
      Wenn Du auf einen Programm-Code stößt (egal in welcher Sprache), der "eval" enthält, so betrachte ihn bis zum Beweis des Gegenteils als hundsmiserabel.

      Sofern dieses Eval von allen äußeren Einflüssen[1] geschützt wird, sollte ein Eval kein Sicherheit-Problem darstellen.
      Aus Sicht der Geschwindigkeit sollte, auch wenn für ein Taschenrechner unwichtig, Eval auch nicht schlechter wegkommen, als ein parsen per RegEx

      mfg Pryos

      [1]Außer den Gewünschten[2]
      [2]Im Fall des Taschenrechners 0-9 und +-/* und eventuell weitere Operatoren

      1. Hallo,

        ... sollte ein Eval kein Sicherheit-Problem darstellen.

        nur mal eine dumme Frage: Welche Sicherheitsprobleme können beim Einsatz von eval denn Auftreten? Ich dachte immer, mit eval aus Benutzereingaben kann ich nur meinen eigenen Rechner hacken.

        Gruß, Jürgen

        1. Hi,

          nur mal eine dumme Frage: Welche Sicherheitsprobleme können beim Einsatz von eval denn Auftreten? Ich dachte immer, mit eval aus Benutzereingaben kann ich nur meinen eigenen Rechner hacken.

          ja und - reicht das nicht?

          Ciao,
           Martin

          --
          Wer barfuß geht, dem kann man nicht die Schuld in die Schuhe schieben.
      2. Hallo,

        Sofern dieses Eval von allen äußeren Einflüssen[1] geschützt wird, sollte ein Eval kein Sicherheit-Problem darstellen.

        Das nicht, aber der ganze "Taschenrechner" vielleicht ein Sinnlosigkeitsproblem. Für +-*/[2] reicht ein Kopfrechner oder ein Taschenrechner, den man aus der Tasche zieht (daher der Name). Und bringt nicht jedes Betriebssystem einen mehr oder weniger einfachen Rechner mit falls die Taschen gerade mal wieder leer sind?

        [2]Im Fall des Taschenrechners 0-9 und +-/* und eventuell weitere Operatoren

        Gruß, Don P