Zastavte tisk! Přístup k nepředaným parametrům je … možný

Automaticky přeloženo z Deepl

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. ("Hello";" world") . ("Hello") concate // Display: "Hello world"
$classconcate // 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.

Vanessa Talbot
• Product Owner • Vanessa Talbot se připojila k programovému týmu 4D v červnu 2014. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Od svého příchodu pracovala na definování klíčových prvků ve 4D. Pracovala na většině nových funkcí preemptivního multi-threadingu a také na velmi složitém tématu: nové architektuře pro enginované aplikace. Vanessa má titul z Telecom Saint-Etienne. Svou kariéru začala ve Výzkumném ústavu kriminalistickém jako vývojářka pro audiovizuální oddělení. Působila také v mediální a lékařské oblasti jako expertka na technickou podporu, produkci i dokumentaci novinek.