La semplicità è il massimo della sofisticazione e con oltre 40 metodi di gestione delle collezioni in 4D v16 R6, le cose diventano molto più facili per gli sviluppatori. Non solo il codice è più pulito e leggibile, ma viene anche scritto in tempi record!
In questo post daremo un’occhiata a come i due nuovi metodi, query e indicesvi permetteranno di manipolare e recuperare elementi da un insieme in un attimo!
I metodi query e indices come in una query 4D tradizionale, sono usati per manipolare e recuperare gli elementi di un insieme. Funzionano esattamente allo stesso modo, l’unica differenza sta nel risultato restituito: query restituisce un insieme contenente tutti gli oggetti che corrispondono alla condizione di ricerca definita dall’argomento della query, mentre indices restituisce un insieme di indici.
Esempio di database: interrogare le collezioni
È possibile combinare due tipi di operatori per interrogare le collezioni. I seguenti esempi di codice mostrano cosa è possibile fare e come procedere.
Come scrivere una query?
Esempio iniziale
Esistono due modi possibili per scrivere una query:
- query come stringa:
$c:=Newcollection(New object("Id";128; "City"; "Paris"; "Weather";1))
$c.push(New object("Id";50; "City"; "New-York"; "Weather";-10))
$c.push(Nuovo oggetto("Id";1792; "Città"; "Tokyo"; "Meteo";-5))
$c.push(Nuovo oggetto("Id";2973; "Città"; "Miami"; "Meteo";15))
$col:=$c.query("Meteo#0")
$col2:=$c.indices("Meteo#0")
- o query con segnaposto. In questo modo, è possibile creare facilmente query dinamiche e 4D converte le variabili per voi:
$w:=$1
$col:=$c.query("Weather#:1";$w)
$col2:=$c.indices("Weather#:1";$w)
esempio avanzato
Gli esempi precedenti servivano solo a mostrare la sintassi, ma ovviamente per trovare qualcosa in un insieme di quattro elementi sarebbe stato sufficiente un ciclo. La vera forza del metodo query è quando si deve trovare qualcosa in un oggetto o in un insieme contenente una grande quantità di dati. Il metodo query è un modo molto efficiente per accedere ai dati.
L’esempio seguente mostra come sia facile trovare il numero di operazioni che un amministratore ha eseguito oggi:
// 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
Operatori di confronto
Gli operatori di confronto vengono utilizzati per confrontare un’espressione con un’altra. Il risultato di un confronto può essere VERO o FALSO. Gli operatori di confronto sono:
- =
- #
- <
- >
- <=
- >=
$col:=$c.query("Weather>0")
//$col=[{Id:128,Città:Parigi,Meteo:1},{Id:2973,Città:Miami,Meteo:15}]
$col2:=$c.indices("Weather>0")
//$col2=[0,3]
operatori logici
Gli operatori logici sono utilizzati per verificare la validità di una condizione. Come gli operatori di confronto, restituiscono VERO o FALSO. Gli operatori logici sono:
- AND
- O
$col:=$c.query("Id>50 AND (Weather>10 OR Weather<0)")
//$col=[{Id:1792,Città:Tokyo,Meteo:-5},{Id:2973,Città:Miami,Meteo:15}]
$col2:=$c.indices("Id>50 AND (Weather>10 OR Weather<0)")
//$col2=[2,3]