If $beispiel=1 then
$beispiel2
endif
gibt es eine funktion wie
wenn beispiel NICHT 1 ist dann $beispiel3?
If $beispiel=1 then
$beispiel2
endif
gibt es eine funktion wie
wenn beispiel NICHT 1 ist dann $beispiel3?
If $Beispiel <> 1 Then
[/autoit]Es gibt auch noch "if not", was aber natürlich "ist ungleich" aus blubbstars Beispiel entspricht.
In deinem Beispiel könntest du natürlich auch noch ein else verwenden für alle Fälle die eben nicht 1 sind.
Hi,
da ein Prozessor (Computer) landläufig nur zwischen 0 und 1 unterscheiden kann, hat sich das auch in den Programmiersprachen durchgesetzt.
Sämtliche Fallunterscheidungen(IF,SELECT,SWITCH, und natürlich auch GLEICH = oder UNGLEICH <>, GRÖSSER > oder KLEINER <) orientieren sich somit an 0 oder 1, genau wie die Abbruchbedingungen von Schleifen (WHILE, DO) und noch viel mehr, z.B. Berechnungen. Bei irgendwelchen Abfragen wird IMMER NUR auf 0 oder 1 getestet!
Da Prozessorintern auch nur mit 0 und 1 gerechnet wird, übrigens per simpelsten Bausteinen wie AND-, OR-, XOR-, und NAND-Gattern kann man auch die 0en und 1en entsprechend "umrechnen".
Eine 1 an den Eingang eines NOT-Gatter angelegt, ergibt am Ausgang eine 0 und umgekehrt. Die Computersprache orientiert sich IMMER an der Hardware (an was sonst^^) und macht demnach aus einem NOT 1 eine 0...
Da aber die "Computer-Hochsprachler" sich zu fein waren, sich mit schnöden Nullen und Einsen zu befassen, ersetzten sie 1 mit TRUE und 0 mit FALSE. (Wahr und nicht wahr). Wenn man also einen Ausdruck mit WAHR bezeichnet, dann entspricht das 1, bei UNWAHR dementsprechend 0. NOT TRUE entspricht FALSE und umgekehrt.
*whisper an die Insider* deshalb bin ich gespannt wie ein Flitzebogen auf die Programmiersprachen eines Quantencomputers *whisper out*
Und somit ergeben sich die Fallunterscheidungen....
Beispiel:
If 1 Then MsgBox(0, "Info", "If-Abfrage hatte Ergebnis 1=True")
If True Then MsgBox(0, "Info", "If-Abfrage hatte Ergebnis True=1")
If 0 Then MsgBox(0, "Info", "Coole Programmiersprache!") ; wenn man diese MsgBox sieht, wirds bitter...
If Not 0 Then MsgBox(0, "Info", "NOT 0 macht der Prozessor zu 1, und dann stimmts!");
If Not False Then MsgBox(0, "Info", "NOT FALSE macht die Programmiersprache zu TRUE und der Prozessor zu 1, und dann stimmts!"); exit
While 1 ;solange hier 1 oder TRUE steht, läuft die Schleife weiter
wend
While NOT FALSE ;läuft ebenso endlos
wend
Da GLEICH natürlich auch nur eine Fallunterscheidung ist, gilt dasselbe. Da GLEICH aber auch gleichzeitig (sic) eine Wertzuweisung ist, gibt es ab und zu Stolpersteine!
Einige Programmiersprachen lassen die Wertzuweisung innerhalb einer Fallunterscheidung zu....was sicherlich dem erhöhten Drogenkonsum in den 70er und 80er Jahren geschuldet ist^^. Glücklicherweise gehört AutoIt nicht dazu!
$a = Not False ;Wertzuweisung, der Inhalt von $a ist TRUE
If $a Then MsgBox(0, "Info", "Abfrage auf TRUE erfolgt!")
$a = 53 ;Wertzuweisung, der Inhalt der Variable $a ist 53
MsgBox(0, "Ergebnis $a=53 ist:", $a = 53) ;Hier ist das Gleich = eine WAHR/UNWAHR-Unterscheidung, also TRUE!
MsgBox(0, "Ergebnis $a=24 ist:", $a = 24) ;Hier ist das Gleich = eine WAHR/UNWAHR-Unterscheidung, also FALSE!
$a=4 ;Wertzuweisung, Variable $a erhält den Wert 4
;in der folgenden Zeile ist das = eine Fallunterscheidung TRUE/FALSE
if $a=4 then Msgbox(0,"Ergebnis","Der Inhalt der Variablen $a ist gleich 4, daher ist das Ergebnis TRUE, und man sieht die Messagebox!")
if $a>0 then Msgbox(0,"Ergebnis","Der Inhalt der Variablen $a ist grösser als 0, daher ist das Ergebnis TRUE, und man sieht die Messagebox!")
Wer aufgepasst hat, konnte vielleicht erkennen, dass ein "IF TRUE THEN" nur ein TRUE ist, und dieses wiederum mit dem Ergebnis eines Vergleichs ($a=4) übereinstimmt! Man kann also völlig auf IF verzichten!
[autoit]$a = 4 ;Wertzuweisung
If ($a = 4) Then ;wenn Klammerausdruck wahr, dann
$ergebnis = 50 ;ergebnis auswählen
Else ;ansonsten
$ergebnis = 60
EndIf
MsgBox(0, "ergebnis=", $ergebnis)
;Das IF/ELSE Konstrukt kann man durch eine Zeile ersetzen
$ergebnis = ($a = 4) * 50 + ($a <> 4) * 60 ;wenn ($a=4) TRUE ist, dann entspricht das 1, und 1*50 ist 50....dann ist ($a<>4) aber 0, und 0*60 ist 60...und umgekehrt
MsgBox(0, "ergebnis=", $ergebnis)
;oder gekürzt
$ergebnis = 60 - ($a = 4) * 10 ;60 minus TRUE(=1) *10 ist 50, und 60 minus FALSE(=0)*10 ist 60
MsgBox(0, "ergebnis=", $ergebnis)
Ich habe keine Ahnung, welche Berechnung (IF oder der Einzeiler) schneller oder langsamer ist, aber eins ist klar, einige dieser Zeilen in ein Script eingestreut ersparen einen Obfuscator definitiv.
Man kann natürlich mehrere ineinandergeschachtelte IF-Abfragen in eine einzige Zeile packen! Wenn es schon den Code nicht lesbarer macht, dann erfordert es wenigstens etwas Gehirnschmalz beim Leser, und führt zum einen oder anderen "OHA"-Effekt
Ich hoffe, nun alle Klarheiten bezüglich IF/THEN, TRUE/FALSE und 1/0 restlos beseitigt zu haben
Somit sollte auch die Verwendung von BITAND, BITOR oder BITXOR möglich werden, denn mit Nullen und Einsen kennt man sich ja nun aus
Nach diesem sehr ausführlichen Beitrag bring ich noch ein Beispiel für Funcs, da kann man True und False auch nutzen.
[autoit]If _truefunc(1) Then MsgBox(0, "True", "Die Funktion ist True.")
[/autoit][autoit][/autoit][autoit]Func _truefunc($i)
[/autoit][autoit][/autoit][autoit];;>> Mit Switch-EndSwitch
Switch $i
Case 1
Return True
EndSwitch
Return False
;;>> Mit If-Endif
If $i = 1 Then Return True
Return False
EndFunc ;==>_truefunc
[/autoit]Sehr nette und ausführliche Zusammenfassung, auch wenns wohl eher zur allgemeinen Verwirrung beiträgt.
Selbst verzichte ich am liebsten auf "if not" Konstrukte. Ist irgendwie für mich wesentlich besser nachvollziehbar wenn immer das selbe Schema mit den Operatoren = oder <> zum Einsatz kommt. Lustig sind doppelte Verneinungen a la if not ($a <> 1) womit man den Quellcode in der Tat sehr schwer nachvollziehbar machen kann. Wenn dann noch AND und OR mit in die if Bedingung wandern wirds grausig.
Im Zweifelsfall immer ein paar mehr Zeilen als irgendwelche verschachtelten und schwer verständlichen Konstrukte. Macht man sich selbst das Leben deutlich einfacher, insbesondere wenn man nach Monaten mal wieder eine Änderung am Programm vornehmen muss.
PS: Variablen mit $true und $false zu benennen macht auch Spass