Procedure / optionale Parameter / Default-Wert mit Funktion?

Anfängerfragen zum Programmieren mit PureBasic.
losgehts
Beiträge: 16
Registriert: 21.06.2020 12:31

Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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?
pfnuesu
Beiträge: 8
Registriert: 01.05.2022 16:10

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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
losgehts
Beiträge: 16
Registriert: 21.06.2020 12:31

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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?
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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))
losgehts
Beiträge: 16
Registriert: 21.06.2020 12:31

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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 :)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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.
losgehts
Beiträge: 16
Registriert: 21.06.2020 12:31

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag von losgehts »

Danke, Deins ist sogar ca 5% schneller.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag 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.
losgehts
Beiträge: 16
Registriert: 21.06.2020 12:31

Re: Procedure / optionale Parameter / Default-Wert mit Funktion?

Beitrag von losgehts »

Habe nicht das Makro gemessen, sondern Deine Formel gegen RGB().
Hat mich nur nebenbei interessiert.
Antworten