Foros Néfele 4 Harbour › Foros › Dudas › No comprendo ejemplo
- Este debate tiene 6 respuestas, 3 mensajes y ha sido actualizado por última vez el 4 años, 1 mes por Daniel. This post has been viewed 622 times
-
AutorEntradas
-
-
10-10-2020 a las 18:18 #1100DanielParticipante
Hola Foro,
Quiero aprovechar el ejemplo que aparece en Nefele_samples en el CreaBBDD.prg pero hay cosas que no entiendo, tal vez alguno pueda explicarme las lineas que pongo a continuacióní, porque incluyen una forma de codificar que desconozco.
1) LOCAL hBBDD := {=>} <----------------------- qué tipo de array es este?
2) LOCAL aTodos := RecuperaBBDD()["Articulos"] <- ¿que función cumple ["Articulos"] luego de nombrar una función que por su definición no recibe parámetros?
FOR each hItem IN aTodos
if hItem["familia"] == nFamilia <-------------------- no comprendo qué tipo de dato es hItem, intenté hacer oCGI:Console(hItem) pero no muestra nada, pero si pongo oCGI:Console(hItem["familia"]) aparecen los números de las familias o CGI:Console(hItem["nombre"]) aparecen los nombres de los artículos.
AAdd( aSeleccion, hItem )
endif
NEXTMuchas gracias desde ya
Daniel
-
10-10-2020 a las 19:14 #1102Alfredo SanzSuperadministrador
Hola Daniel.
Es un tipo de datos conocido como Hash.
Son muy parecidos a las matrices o arrays, pero con la peculiaridad de que puedes hacer referencia a los elementos, no por un número, sino por un nombre
Con arrays tendríamos esto:
aDatos := {}
aAdd( aDatos, Alfredo)
oCGI:Console( aDatos[1])
y nos mostraría Alfredo en el nefele console
Con Hasesh lo haríamos así
hDatos := {=>}
hDatos["nombre"] := "Alfredo"
oCGI:Console( hDatos["nombre"])
-
11-10-2020 a las 20:01 #1120DanielParticipante
Alfredo,
Mucha gracias por tu ayuda, me quedó clarísimo.
Con respecto a la pretunta 2,
2) LOCAL aTodos := RecuperaBBDD()["Articulos"] <- ¿que función cumple ["Articulos"] luego de nombrar una función que por su definición no recibe parámetros?
Tu podrás explicarme o indicarme donde leer sobre esa sintaxis?
Desde ya muchas gracias
Saludos
-
12-10-2020 a las 13:52 #1129Pedro AmaroSuperadministrador
Como comento Fredy esto son Hash, que es una especie de Array en que cada elemento esta compuesto por un nombre y un valor.
Yo lo asemejo mucho a un JSon en memoria, de hecho Harbour tiene funciones para pasar de JSon a Hash y viceversa.
Si te fijas en el proyecto de ejemplo, hay una función CreaBBDD donde hay un JSon con la estructura y los datos de la BBDD que utiliza el ejemplo.
Este JSon tiene un primer nivel con tres elementos, Version, Familias y Articulos.
Version es una campo de tipo cadena
Familia es un campo de tipo Array
y Articulos es un campo de tipo Array
La función RecuperaBBDD() nos devolverá un Hash con todo el JSon, si le añadimos ["Familias"] se aplicará al resultado de RecuperaBBDD() y nos devolverá solo el Array de Familias.
Seria equivalente a
1234LOCAL aBBDD := RecuperaBBDD()LOCAL cVersion := aBBDD["Version"]LOCAL aFamlia := aBBDD["Familias"]LOCAL aArticulos := aBBDD["Articulos"]Como solo vamos a querer "Familias" pues lo simplificamos con
1LOCAL aFamilias := RecuperaBBDD()["Familias"] -
12-10-2020 a las 16:36 #1131DanielParticipante
xhermita,
Muchas gracias por tu explicación. Al no saber nada de Json se me hace medio difícil comprender, pero mas hayá de eso, lo que nunca había visto es esta forma de llamar una función RecuperaBBDD()["Familias"], hasta donde yo sabía los parámetros siempre se ponen dentro de los paréntesis.
Nuevamente gracias
Saludos
-
12-10-2020 a las 17:08 #1132Pedro AmaroSuperadministrador
Es que realmente ["Familia"] no es un parámetro que le paso a la función RecuperaBBDD, se aplica la resultado de la función
12LOCAL hTodo := RecuperaBBDD()LOCAL aFamila := aTodo["Familias"]Es lo mismo que
1LOCAL aFamilas := RecuperaBBDD()["Familias"]Los JSon son un formato de fichero que esta bastante estandarizado en el mundo web, yo no lo había utilizado mucho hasta que empezamos con Néfele, podríamos decir que equivale a un fichero XML pero es más sencillo de codificar.
-
12-10-2020 a las 18:43 #1134DanielParticipante
Perfecto, comprendí.
Muchas gracias por tu tiempo.
Saludos
-
-
-
-
AutorEntradas
- Debes estar registrado para responder a este debate.