Metoda nebo funkce může mít nepovinné parametry. Někdy se funkce volá se dvěma parametry, jindy se třemi. Všichni jsme někdy snili o tom, že budeme přistupovat k parametrům, aniž bychom je museli počítat, kontrolovat, zda byl parametr předán, nebo prostě nemusíme kontrolovat, zda byla proměnná spojená s parametrem inicializována. Kód by tak mohl být mnohem jednodušší a čitelnější, bez všech těch řádků „If“ nebo „Count parameters“.
Nuže, už nesněte a přejděte na 4D v19 R3! Správa parametrů metod a funkcí nebyla nikdy jednodušší.
Přístup k parametrům
Nyní se pro parametry, které jste deklarovali v prototypu funkce nebo metody, platí, že pokud není parametr při volání předán, proměnná se instancuje na prázdnou hodnotu. Dokonce ani v kompilovaném režimu se již kvůli tomu nevyskytuje chyba za běhu. Na této stránce dokumentace máte k dispozici tabulku s korespondencí pro jednotlivé typy proměnných.
V následujícím příkladu funkce používá parametry $param1 a $param2 bez kontroly. Pokud při volání funkce nejsou předány parametry $param1 a/nebo $param2, 4D instancuje textovou proměnnou na prázdný řetězec:
// "concate" function class
Function concate ($param1 : Text ; $param2 : Text)
Alert($param1+" "+$param2)
// "method1" method
$class.concate("Hello";" world") // Display: "Hello world"
$class.concate("Hello") // Display: "Hello "
$class.concate() // Display: " "
Buďte opatrní. Aby mohl 4D vaši proměnnou instancovat, musí znát typ této proměnné. Pokud použijete zápis ${i} a parametr jste nepředali a nedeklarovali, vždy se v kompilovaném režimu zobrazí chyba při provádění.
Inicializace parametrů
Právě jsme se přesvědčili, že pokud není předán parametr, je jeho přidružená proměnná instancována na prázdnou hodnotu. Nyní tedy můžete použít Choose příkaz přímo definovat hodnotu, pokud není parametr předán.
Zde je příklad s metodou a příkazem #DECLARE příkazem:
// "myAlert" method
#DECLARE($param1 : Text ; $param2 : Text)
$param1:=Choose(Count parameters>=1 ; $param1 ; "Hello")
$param2:=Choose(Count parameters>=2 ; $param2 ; "world")
Alert($param1+" "+$param2)
// "method1" method
myAlert() // Display: "Hello world"
A co komponenty?
Aby bylo možné využít tohoto zjednodušení, je třeba překompilovat volanou a volající metodu. V případě metody sdílené mezi hostitelskou základnou a komponentou je tedy třeba překompilovat oba projekty.
Ale jak je to s kompilovanými komponentami, jejichž zdrojové kódy nemám k dispozici? Nebojte se, stále je můžete používat jako dříve. Není třeba měnit kód.
Co bude dál?
Tato nová funkce vám dává spoustu nápadů pro vaše metody a funkce. Neváhejte se o své tipy podělit na fóru.