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):

Code: Alles auswählen

If a=1,2,3
  ;...
EndIf
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.