Bien, como he tenido este día libre, les daré la segunda entrega este mismo día…
Esta entrega tratará sobre un tipo de variable especial, hablo de las variables tipo table (tablas), o también conocidas como arrays (arreglos).
Estas variables son más bien un conjunto de variables o de datos, los cuales pueden ser de distintos tipos, como por ejemplo:
variable = {2,"hola",true}
Se puede observar claramente que los elementos del arreglo son de distinto tipo.
Otra característica de los arreglos es que pueden tener varias dimensiones...
Usando el ejemplo anterior:
variable = {2,"hola",true}
Este arreglo tiene una sola dimensión y tiene 3 elementos, para lograr tener más dimensiones, se insertan arreglos en arreglos, es decir, los elementos de un arreglo pueden ser arreglos también, como por ejemplo:
variable = {{2,"hola",true}, {"chao",3,false}}
Este arreglo tiene 2 x 3 dimensiones.
Pero los arreglos no siempre tienen dimensiones definidas, estos también pueden tener dimensiones que no sean específicas, es decir, por ejemplo, puede que uno de sus elementos tenga 3 dimensiones y otro 4, otro 5, etc.. , como este:
variable = {{2,"hola",true}, {"chao",3,false,true}, {1,2,3,4,5}}
Y te estarás preguntando, ¿Y cómo accedo a los valores dentro de un arreglo?
Fácil, con su índice, por ejemplo, si tengo:
variable = {2,"hola",true}
Si quiero acceder a "hola", tendría que poner el nombre del arreglo seguido del número del índice del elemento al que quiero acceder entre corchetes, en nuestro caso sería:
variable[2]
Eso hace referencia al elemento "hola", ya que busca al elemento 2 de la tabla variable.
Ahora supongamos que tenemos el arreglo de 2 x 3:
variable = {{2,"hola",true}, {"chao",3,false}}
Para acceder al dato 3 del arreglo dos, se va del más externo al más interno, es decir, primero el número del arreglo y luego el del elemento, en nuestro caso:
variable[2][3]
Hará referencia a false ya que variable[2]
sería {"chao",3,false}
y luego variable[2][3]
sería el tercer elemento de variable[2]
, que sería, false
.
Otra característica de los arreglos o tablas es que tienen varias formas de acceder a sus elementos, como los índices numéricos que ya los hemos visto y los índices por nombres, estos últimos se logran declarando variables dentro de un arreglo, por ejemplo:
jugador = {nombre = "Chimecho",x = 2,y = 10}
Para acceder a estos, se usa el nombre del arreglo, seguido de un punto "." y el nombre de la variable que contiene el dato al que queremos acceder, en nuetro caso:
Se puede acceder al dato "Chimecho" mediante la referencia jugador.nombre
, jugador.x
para acceder al valor 2 y jugador.y
para acceder al valor 10
Resumiendo con algunos ejemplos:
var1 = {1, 2, "Chimecho"} var2 = {x = 2, y = 10,var3={5}}
La forma de acceder a los valores y sus resultados serían:
var1[1] -> 1 var1[2] -> 2 var1[3] -> "Chimecho" var2.x -> 2 var2.y -> 10 var2.var3[1] -> 5
Los arreglos no es necesario definirlos al crearlos, se pueden ir agregando campos, tanto numéricos como por nombres. Pueden ir mezclados, esto es, no necesariamente han de ser numéricos o por nombres, pueden contenter ambos tipos de claves a la vez, por ejemplo:
mitabla = { } -- creamos mitabla ( vacia, pero del tipo arreglo ) mitabla[1] = "Datos aquí." mitabla[3] = "Más datos, ups, nos hemos saltado el 2!" mitabla.x = 34 mitabla.y = 54 mitabla["personaje"] = image.load( ... )
Aquí tenemos una tabla que contiene:
dos índices numéricos, 1 y 3, con datos y varios índices por nombre, en uno de ellos hay cargada una imagen.
Con esto quiero decir que se pueden cargar cualquier tipo de objetos o datos dentro de una tabla. Asimismo pueden haber tablas dentro de tablas dentro de tablas.... etc...
Bien, para acceder a los datos internos, sería como antes:
mitabla[1] y mitabla[3] tendrán los primeros datos, y
mitabla.x mitabla.y mitabla.personaje (nótese que puedo utilizar mitabla["nombre"] o mitabla.nombre , es lo mismo)
Cuanta información contiene nuestra tabla? 5 campos.
Haciendo #mitabla (o table.maxn(mitabla), que es lo mismo ya que el operador de longitud (#) llama a esa función automáticamente si es una tabla) veremos que nuestra tabla mide exactamente... 1
Ehm. ¿Uno? no no, mide más, pero Lua tiene su forma de medir las tablas :D
Lua para medir, realiza un recorrido sólo numérico por la tabla, y en cuanto encuentra un indice vacío, dice que hasta ahi mide la tabla. Así que en este caso, miraría mitabla[1] (OK), mitabla[2] (VACIO), finaliza y el resultado es: 1.
Así que tener cuidado añadiendo indices numéricos manualmente, aunque bueno, existen funciones para ello :P
Extra para perfeccionistas:
En vuestros códigos, si utilizais el frame by frame, (es decir, redibujais todo), procurad evitar cosas del tipo:
for i = 1, #mitabla do --xxx -- algo usando #mitabla --xxx end for i = 1, #mitabla do --xxx --xxx end
Ya, que si mentalmente pensamos que hacer #mitabla es hacer un for más, y contar posiciones, si en nuestro código no modificamos mitabla en longitud, tendremos que estamos realizando 3 veces un for que nos quitará velocidad.
Es mucho más comodo utilizar en este caso, local longitud = #mitabla; y luego usar longitud, ya que tendrá la información guardada y no tendremos que medir y medir y medir... con la consiguiente pérdida de velocidad.
Tutoriales realizados con la ayuda y asesoramiento de DeViaNTe
Saludos a todos los que me siguen! :D
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
Información extendida
amos a colaborar xD
Los arreglos no es necesario definirlos al crearlos, se pueden ir agregando campos, tanto numéricos como por nombres. Pueden ir mezclados, esto es, no necesariamente han de ser numéricos o por nombres, pueden contenter ambos tipos de claves a la vez.
Así k vayamos un poco más lejos con los arreglos o tablas:
Aquí tenemos una tabla que contiene:
dos índices numéricos, 1 y 3, con datos.
varios índices por nombre, en uno de ellos hay cargada una imagen.
Con esto quiero decir que se pueden cargar cualquier tipo de objetos o datos dentro de una tabla. Asimismo pueden haber tablas dentro de tablas dentro de tablas.... Etc...
Bien, para acceder a los datos internos, sería como antes...
mitabla[1] y mitabla[3] tendrán los primeros datos
mitabla.x mitabla.y mitabla.personaje
(nótese que puedo utilizar mitabla["nombre"] o mitabla.nombre , es lo mismo)
Cuanta información contiene nuestra tabla? 5 campos.
Haciendo #mitabla (o table.maxn(mitabla), que es lo mismo ya que el operador de longitud (#) llama a esa función automáticamente si es una tabla) veremos que nuestra tabla mide exactamente... 1
Ehm. ¿Uno? no no, mide más, pero Lua tiene su forma de medir las tablas. :D
Lua para medir, realiza un recorrido sólo numérico por la tabla, y en cuanto encuentra un indice vacío, dice que hasta ahi mide la tabla. Así k en este caso, miraría mitabla[1] (OK), mitabla[2] (VACIO), resultado: 1.
Así que tener cuidado añadiendo indices numéricos manualmente, aunque bueno, existen funciones para ello. :P
Espero haber aclarado o liado un poco más, lo que vienen siendo los arreglos.
edito (extra para perfeccionistas):
En vuestros códigos, si utilizais el frame by frame, (es decir, redibujais todo), procurad evitar cosas del tipo:
Ya, que si mentalmente pensamos que hacer #mitabla es hacer un for más, y contar posiciones, si en nuestro codigo no modificamos mitabla en longitud, tendremos que estamos realizando 3 veces un for que nos quitará velocidad.
Es mucho más comodo utilizar en este caso, local longitud = #mitabla; y luego usar longitud, ya que tendrá la información guardada y no tendremos que medir y medir y medir... con la consiguiente pérdida de velocidad.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Master...
Estaría genial hacer uno de LuaDev...con todos sus comandos y funciones...estilo el de Pipagerardo....sería WOW!!!
Saludos!!!
estoy haciendo un manual de
estoy haciendo un manual de referencia, y creeme, cuesta... es realmente extenso. xD
=)
Muchas gracias DeViaNTe, añado al post, por si esto se llena de comments y luego no se ve
Saludos! y gracias de nuevo :D
*.*
me quede impresionado seguire estos tutoriales y cualquier cosa te molestare por MSN xD.
Muchas Gracias Chimecho (ahora si lo puse bien XD)
Saludos :)
\\m// ₪₪₪₪₪₪-- ☠ ☠ ☠ ☠ ☠ ☠ --₪₪₪₪₪₪ \\m//
muy bueno chimi aunque lo
muy bueno chimi aunque lo sabia muy bueno le pondria un 10, ahora hace falta el tutrials de striings que es lo que no se xD
=O me ha quedado aun mas
=O me ha quedado aun mas claro con tu explicación ^^ un saludo chime