Seite 1 von 1

Ternäre Abfrage?

Verfasst: 01.12.2014 17:45
von Tommy
Kann man mit PB ternären Abfragen also If Abfrage in Kurzform schreiben?

Re: Ternäre Abfrage?

Verfasst: 01.12.2014 18:06
von NicTheQuick
Nein.

Re: Ternäre Abfrage?

Verfasst: 01.12.2014 18:13
von Tommy
Ok

Re: Ternäre Abfrage?

Verfasst: 01.12.2014 18:23
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

Re: Ternäre Abfrage?

Verfasst: 01.12.2014 18:28
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.

Re: Ternäre Abfrage?

Verfasst: 01.12.2014 18:53
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.