wunsch: optionaler parameter in der mitte

Für allgemeine Fragen zur Programmierung mit PureBasic.
C h r i s :)
Beiträge: 56
Registriert: 12.11.2015 17:41

wunsch: optionaler parameter in der mitte

Beitrag von C h r i s :) »

es ist toll, dass man bei procedure optionale parameter erstellen kann
aber leider immer nur am ende. man muss die parameter so sortieren
dass optionale parameter immer am ende stehen aber manchmal nicht immer sinnvoll von der logik.
es wäre toll wenn man auch in der mitte optionale parameter erstellen kann.
beispiel: pflichtparameter, pflichtparameter, optionaler parameter, pflichtparameter, optionaler parameter
In pb:

Code: Alles auswählen

Procedure MyFunc(Parameter1, Parameter2, Parameter3 = 25, Parameter4, Parameter5 = 0)
Aufruf:

Code: Alles auswählen

MyFunc(123, 456,, 789)
in vb wird es auch so gemacht. einfach ",," für optionale parameter zwischendurch.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: wunsch: optionaler parameter in der mitte

Beitrag von ts-soft »

Wurde bereits mehrfach im zuständigem Forum gewünscht: z.B. hier: http://www.purebasic.fr/english/viewtop ... parameters
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: wunsch: optionaler parameter in der mitte

Beitrag von Derren »

Kleines Workaround:

Code: Alles auswählen

#I = #PB_Ignore

Macro OptParam(_var_, _value_)
	If _var_ = #PB_Ignore : _var_ = _value_ : EndIf
EndMacro 

Procedure test(a.i, b.i, c.i)	
	OptParam(b, 25)
	
	Debug "a: " + a
	Debug "b: " + b
	Debug "c: " + c
	Debug ""
EndProcedure 

Debug "Aufruf mit 3 Paremeter"
test(1, 2, 3)

Debug "Aufruf mit opt. 2. Parameter"
test(1, #I, 3)

Der Anwender muss eben #I schreiben. Ist denke ich vertretbar.

Alternativ halt noch folgendes, anstatt #I=#PB_Ignore:

Code: Alles auswählen

Macro _
	#PB_Ignore
EndMacro 
;....
test(1,_,3)
Signatur und so
Antworten