Ternäre Abfrage?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Ternäre Abfrage?

Beitrag von Tommy »

Kann man mit PB ternären Abfragen also If Abfrage in Kurzform schreiben?
Zuletzt geändert von Tommy am 27.01.2015 10:31, insgesamt 2-mal geändert.
PB 5.41 x64
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ternäre Abfrage?

Beitrag von NicTheQuick »

Nein.
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Ternäre Abfrage?

Beitrag von Tommy »

Ok
Zuletzt geändert von Tommy am 27.01.2015 10:31, insgesamt 2-mal geändert.
PB 5.41 x64
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Ternäre Abfrage?

Beitrag von edel »

Du kannst das mit einem Macro machen

Code: Alles auswählen

Procedure Ternary2(a, b, c)
	If a
		ProcedureReturn b
	Else
		ProcedureReturn c
	EndIf	
EndProcedure

Macro Ternary(a, b, c)
	Ternary2(Bool(a), b, c)
EndMacro

a = 1
a = Ternary(a>=1, 11, 12)	

Debug a
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ternäre Abfrage?

Beitrag von RSBasic »

Oder mit Hilfe eines eigenen Werkzeuges, welches vor dem Kompilieren ausgeführt wird. Mit Hilfe der von PB bereitgestellten Variable kannst du auf die Quelltextdatei zugreifen und deine ternären Operatoren durch eine normale IF-Abfrage ersetzen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ternäre Abfrage?

Beitrag von NicTheQuick »

Die Macro-Idee ist zwar nett, müsste aber zumindest für Quads, Floats, Doubles und Strings geschrieben werden, damit alles abgedeckt ist. Und schnell im Sinne des Erfinders ist sie Dank des Procedure-Aufrufs leider auch nicht.
Auch ist problematisch, dass Seiteneffekte auftreten können, die bei einem richtigen ternären Ausdruck nicht passieren würden.

Beispiel:

Code: Alles auswählen

 Procedure Ternary2(a, b, c)
   If a
      ProcedureReturn b
   Else
      ProcedureReturn c
   EndIf   
EndProcedure

Macro Ternary(a, b, c)
   Ternary2(Bool(a), b, c)
EndMacro

a = 1
a = Ternary(a>=1, AllocateMemory(100), AllocateMemory(200))   

Debug a
Hier werden beide 'AllocateMemory()' ausgeführt, obwohl nur das erste ausgeführt werden sollte.
Antworten