Taschenrechner..
Florian
- javascript
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
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
@@Mo3bius:
nuqneH
document.Rechner.Textfeld.value =
document.Rechner.Textfeld.value + Zeichenist 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.
[…] 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'
Ach ja,
hier nochmal einen guten Link für beide Fragen:
http://de.wikipedia.org/wiki/Variable_%28Programmierung%29
Mfg Mo3bius
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
mitdocument.Rechner.Textfeld.value + Zeichen;
gleich?
Zuweisung, nicht Gleichsetzung.
Cheatah
Grundlage für Zitat #1540.
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.
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
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
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
Hallo LX,
Mit einem lexikalischen Parser, wie sonst? ...
d.h. du schreibst dir ein eigenes abgespecktes eval.
Gruß, Jürgen
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
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
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
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