A simplicidade é a derradeira sofisticação, e com mais de 40 métodos em 4D v16 R6 para gerir colecções, as coisas estão a tornar-se muito mais fáceis para si como programador. Não só o seu código está limpo e mais legível, como também está escrito em tempo recorde!
Neste post do blogue vamos dar uma vista de olhos sobre como os dois novos métodos, query e indices, permitir-lhe-á manipular e recuperar itens de uma colecção num piscar de olhos!
O query e indices métodos, como numa consulta 4D tradicional, são utilizados para manipular e recuperar itens de uma colecção. Funcionam exactamente da mesma forma, a única diferença está no resultado devolvido: query devolve uma colecção contendo todos os objectos que correspondem à condição de pesquisa definida pelo argumento da consulta, enquanto indices devolve uma colecção de índices.
Exemplo de base de dados: consultar colecções
Pode misturar dois tipos de operadores para consultar a sua colecção. As seguintes amostras de código mostram-lhe o que é possível e como proceder.
Como escrever uma consulta?
Exemplo inicial
Há duas maneiras possíveis de escrever uma pergunta:
- consulta como uma string:
$c:=Novacolecção(Novo objecto("Id";128; "Cidade"; "Paris"; "Tempo";1))
$c.push(Novo objecto("Id";50; "Cidade"; "Nova Iorque"; "Tempo";-10))
$c.push(Novo objecto("Id";1792; "City"; "Tokyo"; "Weather";-5))
$c.push(Novo objecto("Id";2973; "City"; "Miami"; "Weather";15))
$col:=$c.query("Weather#0")
$col2:=$c.indices("Weather#0")
- ou consulta com o titular do lugar. Desta forma, pode facilmente criar consultas dinâmicas, e 4D converte as suas variáveis para si:
$w:=$1
$col:=$c.consulta("Tempo#:1";$w)
$col2:=$c.índices("Tempo#:1";$w)
exemplo avançado
Os exemplos anteriores eram apenas para mostrar a sintaxe, mas obviamente para encontrar algo numa colecção de quatro elementos, um laço teria sido suficiente. A verdadeira força do query é quando se precisa de encontrar algo num objecto ou numa colecção que contenha uma grande quantidade de dados. O query é uma forma muito eficiente de aceder aos dados.
O exemplo abaixo mostra como é agora fácil encontrar o número de operações que um administrador realizou hoje:
// 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"; "Administrador").length
Operadores de comparação
Os operadores de comparação são utilizados para comparar uma expressão com outra. O resultado de uma comparação pode ser VERDADEIRO ou FALSO. Os operadores de comparação são:
- =
- #
- <
- >
- <=
- >=
$col:=$c.consulta("Tempo>0")
//$col=[{Id:128,City:Paris,Weather:1},{Id:2973,City:Miami,Weather:15}]
$col2:=$c.índices("Tempo>0")
//$col2=[0,3]
operadores lógicos
Os operadores lógicos são utilizados para testar a validade de uma condição. Tal como os operadores de comparação, devolvem VERDADEIRO ou FALSO. Os operadores lógicos são:
- E
- OU
$col:=$c.consulta("Id>50 AND (Tempo>10 OR Weather<0)")
//$col=[{Id:1792,City:Tokyo,Weather:-5},{Id:2973,City:Miami,Weather:15}]
$col2:=$c.índices("Id>50 AND (Tempo>10 OR Weather<0)")
//$col2=[2,3]