-
-
-
-
-
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.