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.