Vereinfachtes If

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Vereinfachtes If

Beitrag 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?
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Vereinfachtes If

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Vereinfachtes If

Beitrag 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).
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Vereinfachtes If

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Vereinfachtes If

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Vereinfachtes If

Beitrag 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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten