Grüssi Andreas
Dass die Vorgehensweise (a==5)==true keiner macht (zumindest keiner, den ich kenne), dürfte als vorausgesetzt gelten, obwohl sie nicht falsch ist.
Alles was ich damit aufzeigen wollte, war dass ((a==5)==true) theoretisch dasselbe ist wie (x==true) oder (document.formular.checked==true). Bei den letzteren Varianten sieht man auf den ersten Blick einfach nicht so schön, welchen Stuss man da eigentlich schreibt ;-)
Auch eine nicht-boolsche Variable wird evaluiert zu einem Boolschen Ausdruck!
Aber doch erst, wenn ich sie mit einem bestimmten Wert (oder Wertebereich) verglichen habe, oder? Wenn meine nicht-boolsche Variable a den Wert 5 hat, dann bekomme ich noch lange keinen boolschen Ausdruck, wenn ich die Variable nicht mit etwas vergleiche.
bei (a==5) werden beide Seite ausgelesen, verglichen, und für true oder false befunden, und genau das wird auch zurückgegeben.
<script>
var a=4;
func(a==5);
function func(a) { alert(a.toString()); }
</script>
Die Zuweisung des Wertes 5 zu meiner Variablen a mittels a=5 ergibt doch auch nur einen boolschen Ausdruck, wenn ich den Vergleich anstelle: "(Zuweisung a=5) == (fehlerfreie Zuweisung)"
Naja, bei Zuweisungen wird die rechte Seite ausgelesen, und der Wert auf 'a' übertragen. Der Zuweisungsoperator '=' liefert den Wert der linken Seite, nach erfolgter Wertübertragung! 'a' (und somit auch der ganze Ausdruck) hat also den Wert 5 -> an sich noch kein boolscher Wert. "Konvertiert" man diesen Wert allerdings in einen boolschen Kontext (if-Bedingung), so ist alles (jeder Ausdruck) der nicht zu 0 ausgewertet wird true, und 0 selber false.
<script>
if(a=3) {
alert("true: "+a);
} else {
alert("false: "+a);
}
</script>
ersetze den Funktionsaufruf mal durch func(a=0); Es hängt also nicht davon ab, ob die Zuweisung geklappt hat, sondern auf den Wert den dieser Ausdruck liefert (0 oder != 0).
Das ist auch der Grund, warum Zuweisungen in Bedingungen (if-statements, schleifen, ...) gefährlich sind.
Hmm, auf welcher Uni bist Du? Ich studiere Maschinenbau in Karlsruhe und da hatte ich zwei Semester Informatik, eines davon ist Programmieren mit Java.
Ich studiere Wirtschaftsinformatik in Wien, wir lernten Programmieren mit C++, aber ansonsten wars wahrscheinlich ähnlich chaotisch wie bei dir ;-)
Uns hat man "aus Gründen der Übersichtlichkeit" nahe gelegt zu unterscheiden zwischen dem "Wert einer Variablen" und dem "Ergebnis eines Ausdruckes", wobei mir durchaus bewusst ist, dass der Wert einer Variablen das Ergebnis eines Ausdrucks ist.
Ich komme mit der Formulierung "Ergebnis" eines Ausdrucks nicht klar. "Wert" eines Ausdrucks (true,false) wäre irgendwie einfacher zu verstehen (für mich) Denn das "Ergebnis" einer Zuweisung (ist ja ein Ausdruck) ist eine zwei/mehrdeutige Formulierung.
Ist also auch ein bissl Geschmackssache ;-)
Wenn ich einen Motor konstruiere, gibt es ja schließlich auch mehrere, genau gesagt sogar unedlich viele, funktionierende Lösungen, aber es gibt nicht DIE richtige Lösung, die von hervorragendem Wissen zeugen würde.
Genau das ist ja das schöne daran. Gäbs immer nur eine richtige Lösung, wär das ganze wahrscheinlich nicht sehr produktiv ;-)
Ich sage jetzt einfach mal als Fazit: Jedem so wie es ihm gefällt. :-)
jo, damit kann ich mich anfreunden! -- solang hier keiner ankommt und if((a==5)==true) in sein Javascript schreibt ;-) *g*
lg aus Wien,
bernhard