Jednoduchost je nejvyšší stupeň sofistikovanosti a díky více než 40 metodám pro správu kolekcí ve verzi 4D v16 R6 je pro vás jako vývojáře vše mnohem snazší. Váš kód je nejen čistší a čitelnější, ale také napsaný v rekordním čase!
V tomto příspěvku se podíváme na to, jak tyto dvě nové metody fungují, query a . indices, vám umožní bleskově manipulovat s položkami kolekce a získávat je z ní!
Adresa query a indices stejně jako v tradičním dotazu 4D slouží k manipulaci s položkami v kolekci a k jejich načítání. Pracují úplně stejně, jediný rozdíl je ve vráceném výsledku: query vrátí kolekci obsahující všechny objekty, které odpovídají podmínce hledání definované argumentem dotazu, zatímco funkce indices vrací kolekci indexů.
Příklad databáze: dotazování na kolekce
Pro dotazování na kolekce můžete kombinovat dva typy operátorů. Následující ukázky kódu ukazují, co je možné a jak postupovat.
Jak napsat dotaz?
Startovací příklad
Existují dva možné způsoby zápisu dotazu:
- dotaz jako řetězec:
$c:=Newcollection(New object("Id";128; "City"; "Paris"; "Weather";1))
$c.push(New object("Id";50; "City"; "New-York"; "Weather";-10))
$c.push(Nový objekt("Id";1792; "Město"; "Tokio"; "Počasí";-5))
$c.push(Nový objekt("Id";2973; "Město"; "Miami"; "Počasí";15))
$col:=$c.query("Weather#0")
$col2:=$c.indices("Weather#0")
- nebo dotaz se zástupným znakem. Tímto způsobem můžete snadno vytvářet dynamické dotazy a 4D za vás převede proměnné:
$w:=$1
$col:=$c.query("Weather#:1";$w)
$col2:=$c.indices("Weather#:1";$w)
Pokročilý příklad
Předchozí příklady sloužily pouze k ukázce syntaxe, ale je zřejmé, že k nalezení něčeho v kolekci o čtyřech prvcích by stačil cyklus. Skutečná síla query metody je, když potřebujete něco najít v objektu nebo kolekci obsahující velké množství dat. Na adrese query je velmi efektivní způsob přístupu k datům.
Následující příklad ukazuje, jak snadno lze nyní zjistit počet operací, které dnes správce provedl:
// Save the current log file to JSON and put it in a collection
LOG FILE TO JSON("c:\\ExportLogs")
$txt :=Document to text("c:\\ExportLogs\\JournalExport.json")
$col :=JSON Parse($txt)
// Count how many operations have been done by "Administrator"
$count :=$col.query("extraData.user_name=:1"; "Administrator").length
Operátory porovnávání
Operátory porovnávání slouží k porovnání jednoho výrazu s jiným. Výsledkem porovnání může být TRUE nebo FALSE. Operátory porovnávání jsou následující:
- =
- #
- <
- >
- <=
- >=
$col:=$c.query("Weather>0")
//$col=[{Id:128,City:Paris,Weather:1},{Id:2973,City:Miami,Weather:15}]
$col2:=$c.indices("Weather>0")
//$col2=[0,3]
logické operátory
Logické operátory se používají k testování platnosti podmínky. Stejně jako porovnávací operátory vracejí hodnotu TRUE nebo FALSE. Logické operátory jsou:
- AND
- OR
$col:=$c.query("Id>50 AND (Weather>10 OR Weather<0)")
//$col=[{Id:1792,Město:Tokio,Počasí:-5},{Id:2973,Město:Miami,Počasí:15}]
$col2:=$c.indices("Id>50 AND (Weather>10 OR Weather<0)")
//$col2=[2,3]