Ternäre Abfrage?
Ternäre Abfrage?
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
- 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?
Nein.
Re: Ternäre Abfrage?
Ok
Zuletzt geändert von Tommy am 27.01.2015 10:31, insgesamt 2-mal geändert.
PB 5.41 x64
Re: Ternäre Abfrage?
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?
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.
- 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?
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:
Hier werden beide 'AllocateMemory()' ausgeführt, obwohl nur das erste ausgeführt werden sollte.
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