Nebojte se nedefinovaných hodnot

Automaticky přeloženo z Deepl

S 4D v16 R4, jsme zavedli objektovou notaci, která je skvělým vylepšením jazyka 4D: váš kód je rychlý, flexibilní, efektivní a elegantní! Tato funkce vyvolala na fórech 4D velký zájem a od našich zákazníků jsme obdrželi mnoho zpětných vazeb, které upozorňovaly na situace, kdy se vyskytovaly nedefinované hodnoty, které činily zápis kódu náročným.

Na stránkách 4D v16 R5, jsme zohlednili vaši zpětnou vazbu a zjednodušili jsme používání nedefinovaných vlastností a hodnot pomocí objektové notace.

Tento úspěch se skládá ze dvou částí: zaprvé, jazyk 4D nyní akceptuje nedefinované hodnoty kdekoli ve výrazu pomocí objektové notace. Za druhé, kdykoli přiřadíte proměnné nedefinovanou hodnotu, proměnná se nyní nastaví na výchozí hodnotu podle svého typu (0 pro číselné hodnoty, „“ pro řetězce atd.).

Čtení nedefinované vlastnosti nebo hodnoty

V předchozích verzích generovalo čtení vlastnosti neexistujícího objektu chybu a zastavilo provádění kódu. Nyní ve verzi 4D v16 R5, vyvolá nedefinovanou hodnotu.

Podívejme se na příklad, kdy chcete ověřit existenci vlastnosti objektu p2 v $o.p1.p2 a nejste si jisti, zda je objekt $o.p1 definován:

V aplikaci 4D v16 R4 byste měli nejprve zkontrolovat, zda je definována vlastnost p1, a poté provést totéž pro p2:

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Zkontrolujte, zda je definován objekt p1
If ($o.p1.p2#Null) // Zkontrolujte, zda je definován objekt p2
$o .p1.p2.p3:="nějaký text
„.

V 4D v16 R5 můžete jednoduše napsat níže uvedený kód … i když je p1 nedefinovaný.

C_OBJECT($o)
$o :=InitObject
If ($o.p1.p2#Null) // Check immediately if p1 and p2 are defined
$o .p1.p2.p3:="nějaký text"

ConverT nedefinované hodnotyS

Konverzní příkazy TYPE TEĎ akceptují nedefinované hodnoty

. String, Num, Date, a Time nyní přijímají nedefinované hodnoty a vracejí výchozí hodnotu podle typu. Pro doplnění této sady příkazů jsme vytvořili nový příkaz Bool příkaz, který vrací False při předání nedefinované hodnoty. Tato aktualizace je užitečná zejména při volání příkazů 4D.

Pokud například příkaz 4D očekává jako parametr textový výraz, nelze předat nedefinovanou hodnotu. Proto musíte tento typ kódu napsat v 4D v16 R4 a před použitím příkazu 4D ověřit, zda vlastnost existuje:

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Check if p1 is defined
If ($o.p1.p2#Null) // If p1 is defined, you can now check if p2 is defined

READ PICTURE FILE ($o.p1.p2;$i)
else
READ PICTURE FILE ("";$i)
End if
End if

V aplikaci 4D v16 R5 stačí napsat níže uvedený kód. Příkaz String příkaz zkontroluje a převede nedefinovanou hodnotu za vás. Nyní potřebujete pouze jeden řádek kódu namísto čtyř!

C_OBJECT($o)
$o :=InitObject
// If $0.p1.p2 is undefined, String return "" and READ PICTURE FILE command opens standard Open file dialog box.
READ PICTURE FILE (String($o.p1.p2);$i)

Přiřazení nedefinované hodnoty

Pokud od nynějška přiřadíte proměnné nedefinovanou hodnotu, proměnná se nastaví na hodnotu svého výchozího typu (0 pro číselnou hodnotu, „“ pro řetězec atd.).

C_LONGINT($l)
$l :=10
$l :=$o.undefined
// In 4D v16 R4, $l does not change, $l=10
// In 4D v16 R5, $l is reinitialized, $l=0

Ve skutečnosti můžete nyní předat nedefinovanou hodnotu jako parametr i metodě projektu. Funguje to úplně stejně. Hodnota se okamžitě převede podle deklarovaného typu parametru a nastaví se na hodnotu jeho výchozího typu.

Konečně můžete také předat nedefinované hodnoty příkazu Case of a příkazům If. V tomto případě 4D považuje nedefinovanou hodnotu za False:

If ($o.b)
// if $o.b is undefined this code is not executed
...

End if

Podrobnější informace naleznete v článku Používání objektové notace.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se připojil k týmu 4D Program v listopadu 2016. Jako Product Owner má na starosti psaní uživatelských příběhů, které následně převádí do funkčních specifikací. Jeho úkolem je také zajistit, aby dodaná implementace funkcí splňovala potřeby zákazníků.Po získání bakalářského titulu v oboru informatiky na CNAM nastoupil Fabrice do malé softwarové vydavatelské společnosti jako vývojář Windev. Poté pracoval pro různé společnosti v oblasti průmyslu a obchodu jako vývojář aplikací Windev a webových aplikací a také jako technický poradce pro nové funkce.