Make your own free website on Tripod.com
 
Uso de Listas en Lingo.
 
Las listas en Director son un recurso muy potente e imprescindible de utilizar en casi cualquier proyecto. Basicamente una Lista de Lingo es una forma de almacenar informacion ordenadamente, de forma que luego la podemos mantener en memoria para consultarla o manipularla de muchas formas.
Supongamos el caso de un tablero de damas o ajedrez en donde las fichas estan colocadas en una casilla inicial. Durante el juego esas fichas al ser movidas o comidas pasaran a tener otra posicion distinta a la inicial. ¿Como llevar la cuenta de las fichas de dos o mas jugadores en un caso como este?
Para esto y muchas cosas mas tenemos las Listas. Con ellas no solo podemos tener las posiciones de las fichas, al dia sino que ademas podemos consultarlas para averiguar si una ficha que va a ser movida hara un movimiento valido, sin subirse encima de otra ficha del mismo color, porque en todo momento conocemos la situacion del tablero gracias a nuestras listas del juego.
Las Listas:
En Lingo existen dos tipos de Lista: la Lista Simple y la Lista de Propiedades.
Veamos la primera, la Lista Simple:
Para definir e inicializar una lista vacia simple en memoria sobre la que trabajar utilizamos:
global milista
limista = [ ]
Aqui tenemos una lista vacia, esperando a ser llenada con informacion.
Para añadir un valor a la lista podemos utilizar la funcion: add(milista, valor), por ejemplo.
global milista
add(milista, #peonnegro) -- ahora la lista tendra el valor: [#peonnegro]
Si añadimos un nuevo valor a la lista, pasara a ocupar el lugar siguiente, por ejemplo:
global milista
add(milista, #alfilnegro) -- ahora la lista tendra los valores: [#peonnegro, #alfilnegro]
Para recuperar los datos existentes en una lista utilizamos la funcion: getAt(lista, posicion)
global milista
getAt(milista, 2) -- devolveria el segundo valor de la lista: #alfilnegro
Podemos saber tambien el numero de elementos que tiene una lista con count(milista) ,
Asi podriamos utilizar un bucle para extraer todos los elementos de una lista, por ejemplo:
repeat with x = 1 to count(milista)
dato = getAt(milista, x)
put dato
end repeat
-- Este bucle iria recogiendo todos los elementos de la lista desdel uno hasta el ultimo.
-- Ese dato recogido de cada iteracion del bucle se lo hemos ido asignando a la variable dato.
Tambien podemos recuperar un dato en una posicion de la lista con gePos(lista, posicion) pero debemos estar seguros de que ese dato existe para no provocar un error en el programa. Esto nos devolvera un numero que corresponde con la posicion del elemento en la lista, por ejemplo:
num = getPos(milista, #peonnegro) -- num pasaria tener el valor 1, que corresponde a la posicion de este elemento en la lista.
Si queremos borrar un valor de la lista simple utilizamos la funcion: deleteAt(lista, posicion)
Finalmente si quisieramos vaciar por completo una lista simplemente tendriamos que señalarla como vacia del mismo modo que la inicializamos antes:
global milista
limista = [ ]
En definitiva las listas simples nos permiten almacenar objetos de forma ordenada, pero en Lingo tenemos otro tipo de listas mas sofisticado:
Las Listas de Propiedades:
Este tipo de listas se diferencian de las primeras en que almacenan la informacion segun una clave y un valor. Este valor pasa a ser asociado a su clave, pudiendo ser recuperado simplemente a traves de su clave, igual que si se tratara de una variable con sus partes, nombre y valor.
Para inicializar una lista de propiedades vacia utilizamos el simbolo " : " en el interior de la lista para indicar a Lingo de que se trata de una lista de propiedades y no de una lista simple.
global milista
limista = [ : ]
Para añadir un valor a esta lista con su clave utilizamos: addProp(lista, clave, valor), por ejemplo:
addProp(milista, #peones, 4)
addProp(milista, #alfilnegro, "H1V1")
addProp(milista, #reyblanco, point(280, 233))
Ahora nuestra lista tendria este formato: [#peones: 5, #alfilnegro: "H1V1", #reyblanco: point(280, 233)]
Normalmente utilizamos las listas para almacenar el mismo tipo de datos, podemos tener una lista para las posiciones, otra para las fichas comidas, otra para las casillas vacias, etc... este ejemplo anterior era solo ilustrativo.
Fijaros que el formato de las Listas de Propiedades es siempre: [clave : valor , clave : valor].
Para recuperar el valor de una propiedad de una lista utilizamos: getAProp(lista, propiedad), por ejemplo el script:
getAprop(milista, #reyblanco), devolveria el valor point(280, 233), que es el valor de la propiedad #reyblanco, de la lista milista.
Si queremos cambiar el valor de una propiedad ya determinada de la lista utilizamos: setAProp(lista, clave, valor)
Por ejemplo el script:
setAprop(milista, #peones, 18) asignaria a la clave #peones el valor 18, con lo que la lista tendria ahora este formato:
[#peones: 18, #alfilnegro: "H1V1", #reyblanco: point(280, 233)]
Si ahora consultaramos el valor de esta clave en la lista con getAprop(milista, #peones) obtendriamos el numero 17.
Hasta aqui hemos visto como trabajar con Listas en Lingo y como recuperar y manejar los valores almacenados en ellas.
Las Listas y su uso es algo practicamente imprescindible y aunque si estais aprendiendo aun a programar os resulte quiza un recurso poco util o incomodo, segun vayais entrando en la programacion y vayais usandolas vereis como es dificil entender como habiais hecho las cosas hasta ahora sin ellas.
Con las Listas siempre teneis ahi, en la memoria del ordenador, una completa base de datos con lo que necesitara vuestro programa para funcionar.
Se os puede ocurrir tambien combinar esto para guardar los datos de las listas en el disco, con las funciones setPref y getPref para poder recuperarlos en cualquier otro momento.
¿Habeis pensado como Director y otros programas conservan la posicion de las ventanas, los directorios de disco, etc, cada vez que los abris?
Estos programas usan algo muy parecido a las Listas de Lingo para mantenerse personalizados por los usuarios.