Seite 1 von 1
Vereinfachtes If
Verfasst: 11.08.2021 18:22
von jacdelad
Hallo,
wenn ich zwei Werte vergleichen will, dann kann ich ja If oder Select verwenden. Mir ist auch klar, wie die verwendet werden. Gibt es einen Mittelweg, um einen Wert mit vielen anderen zu vergleichen, a la:
Code: Alles auswählen
If a=1 Or a=2 Or a=3
;...
EndIf
Select a
Case 1,2,3
;...
EndSelect
In dem Fall ist eine Select-Anweisung sicher lesbarer, vor allem wenn ich nicht "a" sondern einen Term (z.B. "a=eingang*12+64-padding") einsetze. Das Ergebnis kann ich natürlich zwischenspeichern, aber darum geht es ja nicht. Mir schwebt in etwa sowas vor (es geht im Endeffekt nur um ein Select mit einer Case-Anweisung):
Gibt es da eine Möglichkeit oder bleibt mir nur da Select-mit-einem-Case?
Re: Vereinfachtes If
Verfasst: 11.08.2021 18:34
von Olafmagne
Hi,
Meines Wissens nach gibt es nur die von Dir genannten Möglichkeiten
Code: Alles auswählen
If a=1 Or a=2 Or a=3
;...
EndIf
Select a
Case 1,2,3
;...
EndSelect
Wäre eine Anregung für Fred?
Olaf
Re: Vereinfachtes If
Verfasst: 11.08.2021 18:37
von jacdelad
Vielleicht...vielleicht auch nicht. Soweit ich weiß ist Select ja schon ziemlich schnell und im Endeffekt spare ich nur eine Zeile ein. Da ist mir "Case <3,>10" oder ein Select mit Floats wichtiger, aber das ist ein anderes (und schon besprochenes Thema).
Re: Vereinfachtes If
Verfasst: 11.08.2021 18:42
von Olafmagne
Na ja, irgendwas ist immer,das fehlt,verbessert werden kann,. . .
Mal sehen was das C-Backend dazu sagt ( gibt es sowas in C ? )
Olaf
Re: Vereinfachtes If
Verfasst: 11.08.2021 20:01
von STARGÅTE
Wenn es sich dabei nur um Flags handeln, die Werte selber also nicht wichtig sind, sondern nur das sie unterschiedlich sind, dann kannst du auch in die binäre Darstellung wechseln und folgendermaßen vorgehen:
Code: Alles auswählen
EnumerationBinary ; Wichtig ist hier das Binary, so stehen dir in 64bit-Umgebung 64 Werte zu Verfügung.
#Wert1
#Wert2
#Wert3
#Wert4
#Wert5
EndEnumeration
a = #Wert1
If a & (#Wert1|#Wert2|#Wert3) ; Entspricht deinem If a = 1,2,3
Debug "a = 1,2,3"
EndIf
If a & (#Wert4|#Wert5)
Debug "a = 4,5"
EndIf
In dieser Variante wird tatsächlich nur genau eine Abfrage getätigt. In allen anderen Fällen ("If mit Or" oder "Select Case") werden immer mehrere Abfragen durchgeführt. Da wäre der Hinweis nur von mir: Schreibe häufig zutreffende Abfragen so früh in die Or-Schlange wie möglich, da die weiteren Prüfungen dann nicht durchgeführt werden. Wenn deine 1,2,3 ehr selten vorkommen, dann lieber mit anderen beginnen.
Re: Vereinfachtes If
Verfasst: 11.08.2021 20:50
von jacdelad
Das ist natürlich eine sehr gute Idee. Aber natürlich habe ich mit 1,2,3 nicht immer feste Werte gemeint. Trotzdem ein interessanter Ansatz für Konstanten.