Seite 1 von 1
Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 10:48
von losgehts
Ich möchte in einer Prozedur optionale Parameter verwenden.
Konkret geht es um Farben.
Bsp:
Procedure Test(col.i=16448250)
Debug col
EndProcedure
16448250 ist das Ergebnis von RGB(250,250,250)
Das könnte ich natürlich als Zahl verwenden, aber ich fände es lesbarer, wenn ich RGB(250,250,250) schreiben dürfte, nämlich so :
Procedure Test(col.i=RGB(250,250,250))
Debug col
EndProcedure
Geht aber nicht (Syntax Error).
Lässt sich das irgendwie bewerkstelligen?
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 11:48
von pfnuesu
Hallo losgehts
Kommt natürlich darauf an, was du schlussendlich mit dem RGB-Value anstellen willst.
Eine Lösung wäre z.B., dass du statt einem Wert die drei Farbwerte separat übergibst:
Code: Alles auswählen
Procedure.l Test(R.i,G.i,B.i)
ProcedureReturn RGB(R,G,B)
EndProcedure
Debug Test(250,250,250)
Viele Grüsse
Pfnuesu
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 12:33
von losgehts
Danke Dir.
Ich meine nur die Schreibweise von optionalen Parametern. Ein Literal (oben im Beispiel 16448250) kann man ja als Defaultwert für den optionalen Parameter nehmen, einen Funktionsaufruf (oben im Beispiel RGB(250,250,250)) aber nicht, obwohl der Wert aus Sicht des Compilers ja auch konstant sein sollte.
Vielleicht gibts ja eine Compileroption, die solche Werte vorweg auflöst? Oder irgendwas anderes?
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 12:39
von DePe
Du könntest ein Macro verwenden:
Code: Alles auswählen
Macro MRGB(R,G,B)
(B * 65536 + G * 256 + R)
EndMacro
Procedure Test(col.i=MRGB(250,250,250))
Debug col
EndProcedure
Test()
Test(16448250)
Test(RGB(250,250,250))
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 13:18
von losgehts
Sowas suchte ich, vielen Dank!
Klappt auch im Modul bei einer Prozedur, die im DeclareModule erwähnt wird, wenn ich das Macro ebenfalls im DeclareModule bringe.
Schön

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 13:21
von NicTheQuick
losgehts hat geschrieben: 05.03.2023 12:33Ich meine nur die Schreibweise von optionalen Parametern. Ein Literal (oben im Beispiel 16448250) kann man ja als Defaultwert für den optionalen Parameter nehmen, einen Funktionsaufruf (oben im Beispiel RGB(250,250,250)) aber nicht, obwohl der Wert aus Sicht des Compilers ja auch konstant sein sollte.
Das funktioniert so nicht. RGB() ist kein Macro, sondern eine echte Funktion einer LIbrary im Hintergrund. Der Compiler kann diese nicht während des Kompilierens auflösen. Deswegen funktioniert sie nicht als optionaler Parameter.
Mein Vorschlag wäre deswegen auch ein Macro wie es DePe ebenfalls vorgeschlagen hat, allerdings würde ich es sicherheitshalber anders schreiben, nämlich so:
Code: Alles auswählen
Macro RGB_(r, g, b)
(((r) & $FF) | (((g) & $ff) << 8) | (((b) & $ff) << 16))
EndMacro
Auf diese Weise kann nichts passieren, wenn man statt einer einzelnen Zahl einen komplexeren Term eingibt oder ein Wert größer 255 oder kleiner 0 übergeben wird.
Auf der anderen Seite ist mir aber auch gerade aufgefallen, dass das original RGB() ebenfalls voraussetzt, dass sich die einzelnen Farbwerte im Bereiche 0..255 befinden müssen.
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 13:35
von losgehts
Danke, Deins ist sogar ca 5% schneller.
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 14:57
von NicTheQuick
Das kann eigentlich nicht schneller sein, da es ein Macro ist und schon zur Compile-Zeit übersetzt wird. Außer natürlich du nutzt es nicht wie in deinem ersten Post mit konstanten Werten.
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Verfasst: 05.03.2023 19:05
von losgehts
Habe nicht das Makro gemessen, sondern Deine Formel gegen RGB().
Hat mich nur nebenbei interessiert.