La simplicidad es la máxima sofisticación, y con más de 40 métodos en 4D v16 R6 para gestionar colecciones, las cosas se vuelven mucho más fáciles para usted como desarrollador. No sólo su código es más limpio y legible, sino que también se escribe en un tiempo récord.
En esta entrada del blog veremos cómo los dos nuevos métodos query y indicesle permitirán manipular y recuperar elementos de una colección en un abrir y cerrar de ojos.
Los métodos query y indices como en una consulta tradicional de 4D, se utilizan para manipular y recuperar elementos de una colección. Funcionan exactamente igual, la única diferencia está en el resultado devuelto: query devuelve una colección que contiene todos los objetos que coinciden con la condición de búsqueda definida por el argumento de la consulta, mientras que indices devuelve una colección de índices.
Ejemplo de base de datos: consulta de colecciones
Puede mezclar dos tipos de operadores para consultar su colección. Los siguientes ejemplos de código le muestran lo que es posible y cómo proceder.
¿Cómo escribir una consulta?
Ejemplo de inicio
Hay dos formas posibles de escribir una consulta:
- Consulta como una cadena:
$c:=Nuevacolección(Nuevo objeto("Id";128; "Ciudad"; "París"; "Tiempo";1))
$c.push(Nuevo objeto("Id";50; "Ciudad"; "Nueva York"; "Tiempo";-10))
$c.push(Nuevo objeto("Id";1792; "Ciudad"; "Tokio"; "Tiempo";-5))
$c.push(Nuevo objeto("Id";2973; "Ciudad"; "Miami"; "Tiempo";15))
$col:=$c.query("Weather#0")
$col2:=$c.indices("Weather#0")
- o consulta con marcador de posición. De esta manera, puede crear fácilmente consultas dinámicas, y 4D convierte sus variables por usted:
$w:=$1
$col:=$c.query("Tiempo#:1";$w)
$col2:=$c.indices("Tiempo#:1";$w)
ejemplo avanzado
Los ejemplos anteriores eran sólo para mostrar la sintaxis, pero obviamente para encontrar algo en una colección de cuatro elementos, habría bastado con un bucle. La verdadera fuerza del método query es cuando se necesita encontrar algo en un objeto o una colección que contiene una gran cantidad de datos. El método query es una forma muy eficiente de acceder a los datos.
El siguiente ejemplo muestra lo fácil que es ahora encontrar el número de operaciones que un administrador ha realizado hoy:
// 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" _COPY9$count:=$col.query("extraData.user_name=:1"; "Administrator").length
Operadores de comparación
Los operadores de comparación se utilizan para comparar una expresión con otra. El resultado de una comparación puede ser TRUE o FALSE. Los operadores de comparación son:
- =
- #
- <
- >
- <=
- >=
$col:=$c.query("Tiempo>0")
//$col=[{Id:128,Ciudad:París,Tiempo:1},{Id:2973,Ciudad:Miami,Tiempo:15}]
$col2:=$c.indices("Tiempo>0")
//$col2=[0,3]
operadores lógicos
Los operadores lógicos se utilizan para comprobar la validez de una condición. Al igual que los operadores de comparación, devuelven TRUE o FALSE. Los operadores lógicos son
- AND
- OR
$col:=$c.query("Id>50 AND (Weather>10 OR Weather<0)")
//$col=[{Id:1792,Ciudad:Tokio,Tiempo:-5},{Id:2973,Ciudad:Miami,Tiempo:15}]
$col2:=$c.indices("Id>50 AND (Tiempo>10 OR Tiempo<0)")
//$col2=[2,3]