JavaScript // Logische Operatoren

in #deutsch3 years ago

Hallo Leutz und Künstler der Programmiersprachen.
Ich versuch mir grad ein wenig Javascript zum beibringen und scheitere haltlos bei den logischen Operatoren. Obwohl ich von anderen Programmiersprachen dachte, ich hätte da zumindest ein wenig Ahnung, scheint es genau das Gegenteil zu sein. Je mehr ich versuche Klarheit zu erlangen, desto dämlicher schau ich aus der Wäsche.

Irgendeine Überlegung muss wohl falsch sein (oder mehrere)

Logisches UND (&&)
Alle Bedingungen müssen wahr sein um wahr zu sein
Logisches ODER (||)
1 Bedingung muss wahr sein um wahr zu sein

wahr&&wahr = wahr
wahr&&falsch = falsch
falsch&&falsch=falsch (also nicht wie in der Politik)

wahr||wahr=wahr
wahr||falsch=wahr
falsch||falsch=falsch

Wenn jetzt aber ein Gefüge mit gemischten Operatoren zustande kommt, kann ich einfach nicht mehr unterscheiden, warum ein Ergebnis wahr oder falsch ist.
Liegt es an einer Priorität? So wie Punkt vor Strichrechnung? Es wird von Links nach Rechts ausgewertet, aber anscheinend gilt auch nicht einheitlich, ob ein Wert wahr oder falsch ist. Ich hab jetzt grad den Verdacht, wenn es 3 Werte gibt, die Paare als 1 + (1+1) ausgewertet werden.

fragezeichen.gif

Sort:  

Ja es gibt prioritäten, weiß grade aber nicht wie die sind. Ist nicht einfach links nach rechts.

Wenn ich nich nicht irre

Var i=1;

++i==1; falsch
i++==2; wahr

Beim ersten wird i erst hochgezählt und ist somit schon zwei, beim zweiten ist i noch 2 und wird dann hochgezählt.

Hast du ein konkretes Beispiel wo du ein Problem hast?

also, mal danke für die Antwort. Ich rede noch gar nicht von diesem In- und Dekrementieren (so hieß das doch?), das kommt wohl noch später. Problem ist mal primär, die Antworten sind für mich nicht erkennbar. Ich versuch das mal aus dem Programm raus

console.log(true&&true||false); //true
(warum auch nicht)

console.log(true||true&&false); //true
(hm, das && ist false, aber es genügt wohl ein || true, um true zu sein)

console.log(false||true&&true); //true//
(Also, wohin wird der true hinter dem || gerechnet, offensichtlich zum &&, aber welche Aussagekraft hat dann, das erste false überhaupt noch? Oder lest sich das wie false||true sowie true&&true?)

console.log(false&&true||true);//true
(obwohl false&&true eigentlich false sein müssten, vielleicht die Regel, dass das ODER nur 1 Bedingung braucht um wahr zu sein) ... versuchen wirs mal umgedreht. .. Ne, das war schon die 1te Auflistung

console.log(true&&true||false); //true
(und jetzt stellt sich mir wieder die Frage, warum das true ist, obwohl ein || false ist und diese Regel grad vorher (falls es diese Regel war) noch gegolten hat.)

Hier findest du die prioritäten. Hmm demnach stimmt nicht was ich vorher geschrieben hatte, das muss ich ja mal testen, hätte schwören können das es so ist. ++... und ...++ sind im rang über ==

Wenn du x&&y||z hast ist das equivalent mit z||x&&y es wird erst x&&y ausgewertet und dann dessen Ergebnis mit || z.

Da && im Rang über || steht.

Gruppierung (also in Klammern) stehen immer an erster stelle.

x && (y||z) ist nicht gleich x && y || z das ist mit (x && y) || z gleich zu setzen.

Wie du sagtest punkt vor strich, hier ist es und vor oder.

Daher wären Klammer am sinvollsten, damit man leichter sieht was man will, dann kommt es nicht zu Missverständnis, weil man die Rehenfolge vergisst.

Danke für die Liste. Im Onlineunterricht wurde dieser Hinweis aber nicht erwähnt. (oder ich habs überlesen/überhört?)

Nachtrag: Was mich aber trotzdem irritiert ist folgendes:

console.log(true||true&&false); //true

wenn UND vor ODER gilt und UND aber eindeutig false ist, wie kann das true sein?

Falsch verstanden, es geht vor im Sinne von es wird vorher ausgewertet, so dass du dann true || false hast, was ja true ist.

kömmet vermutlich daher, daß Javascript keine Programmiersprache, sondern eine Scriptsprache ist, also etwas Darstellendes und nicht etwas Gestaltendes ! Die Logik liegt näher bei HTML !!

Html hat logische Operatoren?

... hat meiner Erinnerung nach wenig damit zu tun .. eine Programmiersprache muß in Maschinensprache übersetzt werden und braucht einen Compiler, also etwas, das diese niedlichen morseähnlichen Nullen und Einsen als Impulse erzeugt und auf Maschinen abläuft, also zB auf Servern oder als Betriebsprogramme, während eine Scriptsprache im Browser abläuft und die Darstellung der vom Server gesendeten Daten ermöglicht .. php liegt da irgendwo dazwischen und daher gibts da auch ein paar Freiheiten wie das freie Definieren von Integer etc - aber Javascript ist definitiv eine HTML-Erweiterung und keine Programmiersprache .. Java dagegen ist meiner Erinnerung nach wohl eine Programmiersprache .. was sie genau tut, kann ich aber auch nicht sagen, ich weiß nur, wie sie ihren Namen abbekommen hat ... weil die Jungs, die sie entwicckelt haben, sich so lange eingeschlossen haben, bis sie fertig war .. und da sie dabei eine Menge Kaffee verbraucht haben - in der dortigen Gegend Java genannt - wurde das Resultat dann auch danach benannt ..

Achso... Html Erweiterung... Damit kann ich schon sinngemäß was anfangen.... Java kam mir beim reinschnuppern wie aufgeblasenes C vor

Ich habe mich ca. 2007 ausgeklinkt .. ab da habe ich eingesehen, daß ich es im Programmieren nie zu einer Meisterschaft bringen werde - ist Talentsache .. ich möchte halt nur soviel verstehen können, daß ich weiß, worums geht und was möglich ist und ab und zu Änderungen vornehmen, zB in Wordpress -- die Ausführung müssen halt dann jene mit Talent übernehmen .. auf DER Seite damals habe ich bis aufs Gästebuch alles gemacht -- Grafiken, Landschaften, den Diaplayer, die Lottozahlen und Passwörter in Javascript -- und das wars dann für mich (die s/w Zeichnung auf der Startseite war ein Platzhalter für eine Slotmaschine -- 3 Pflaumen und so, die habe ich aber dann verloren und es nie mehr geschafft, sie zu rekonstruieren .. wenn du auf sourcecode gehst, siehst du nicht nur das Javascript, sondern auch noch die braven Tabellen - das war kurz vor dem CSS-impact damals. Die Seite war damals bildschirmfüllend, die Grafik fehlerfrei dargestellt, keine Abstufungen in den Farben etc.-- waren halt die alten Röhrenmonitore und die ersten lausigen Flachbilder) ) http://members.chello.at/~treffpunkt/

Was dein obiges Problem anlangt -- nachgedacht, was noch im Unterbewußtsein schlummert --- sowohl programmieren als auch scripten spielt sich im Binärsystem ab, daher werden manche Befehle sicher ähnlich aussehen .. also ein & zB bedeutet, daß beide Variablen abgespielt werden, ein doppeltes && bedeutet, die zweite Variable wird ausgeführt, die erste aber auch dann nicht, wenn die zweite nicht funktioniert oder lahmgelegt wird (vom User zB , siehe das Cookie-Setting ) also wenn du die Cookies oder Tracker verbietest, dann ist && lahmgelegt,... was bei dir danach folgt, könnte diese Ausnahmeregelung sein, welcche die angeblich ach so essentiellen Cookies trotz Lahmlegung durch &&-Block bedeutet -- das ist aber jetzt eine Vermutung, vielleicht weiß ein Kundiger da mehr ..

Danke konnte es klären... Vllt später mehr dazu.

@mein-senf-dazu und @weirdrat

mithilfe von @ceridwen war es mir möglich, dieses kleine, nervige Problem in den Griff zu bekommen. Evtl. hat es der Senf eh schon angesprochen, aber ging nicht bei mir rein...

bsp.

true||true&&false = true // weil

&& vor || heißt

true||false (resultierend aus dem true&&false=false) bleibt

true, weil bei || nur 1 Bedingung wahr sein muss.

Ja genau, das was ich meinte , das "geht vor" bedeutet das der Ausdruck als erstes ausgewertet wird und dann wieter gemacht wird mit dem Oder und nicht das quasi und wichtiger ist und das Oder dann egal ist.

Und deswegen es auch besser ist mit klammern zu arbeiten.