// complila con valac nombre.gs --pkg gee-1.0
[indent=4]
uses Gee
//creamos la clase casa
class casa: Object
Portal: int
Piso:int
Puerta:string
Calle:string
casa0:casa
init
var lista_de_casas = new list of casa
//Instanciamos el objeto casa
casa0= new casa()
//Introducimos datos
casa0.Portal=4
casa0.Piso=3
casa0.Puerta="A"
casa0.Calle ="Calle Mayor"
//Introducimos en la lista
lista_de_casas.add(casa0)
// Si queremos obtener un nuevo item en la lista deberemos reinstanciar
// el objeto casa y lo podemos hacer con el mismo nombre
casa0= new casa()
casa0.Portal=6
casa0.Piso=7
casa0.Puerta="B"
casa0.Calle ="Calle Menor"
lista_de_casas.add(casa0)
for var e in lista_de_casas
print e.Calle+" "+e.Portal.to_string()+ "-"+ e.Piso.to_string()+ " "+e.Puerta+ " "
// este for tiene un warning consigo fallo de la librería gee
En este tipo de listas podríamos introducir tipos de variables creados por nosotros desde otros objetos o usar otros que ya están creados como los de las librerías SDL. Por ejemplo : Rect y Surface. Es decir, podemos anidar objetos dentro de otros y todos meterlos en una lista. En el siguiente ejemplo Introduciremos un objeto dentro de otro objeto, es decir el objeto persona lo introduciremos dentro del objeto casa. Pero claro esta que los objetos necesitan instanciarse para ser usados y si el objeto casa quiere usar el objeto persona este debe de haber sido correctamente instanciado. Lo haré mediante el constructor de casa. Aún así lo podría haber hecho a través de init. ¿Para que sirve el constructor? Es el que recoge las variables de construccion del objeto cuando lo instanciamos con new. En este caso no tiene ninguna. init al igual que construct se ejecutan cuando instanciamos el objeto con new. Sin embargo se dispara antes que construct. Pero bueno, dejemos esto de la construccion de objetos para otro capítulo.
[indent=4]
uses Gee
class persona: Object
Nombre:string
Apellidos:string
class casa: Object
Portal: int
Piso:int
Puerta:string
Calle:string
Persona:persona
construct () // también se podría haber puesto init aquí.
Persona= new persona()
casa0:casa
e:Collection
init
var lista_de_casas = new list of casa
//Instanciamos el objeto casa
casa0= new casa()
//Introducimos datos
casa0.Portal=4
casa0.Piso=3
casa0.Puerta="A"
casa0.Calle ="Calle Mayor"
casa0.Persona.Nombre="Gorka"
casa0.Persona.Apellidos="Santos Garmendia"
//Introducimos en la lista
lista_de_casas.add(casa0)
// Si queremos obtener un nuevo item en la lista deberemos reinstanciar
// el objeto casa y lo podemos hacer con el mismo nombre
casa0= new casa()
casa0.Portal=6
casa0.Piso=7
casa0.Puerta="B"
casa0.Calle ="Calle Menor"
casa0.Persona.Nombre="Gaizka"
casa0.Persona.Apellidos="Sanchez Soler"
lista_de_casas.add(casa0)
for e in lista_de_casas
print e.Persona.Nombre + " " +e.Persona.Apellidos
print e.Calle+ " "+ e.Portal.to_string()+ "-"+ e.Piso.to_string()+ " "+ e.Puerta+ " \n"
// este for tiene un warnin consigo fallo de la librería gee
Si lo necesitamos también podemos incluir listas dentro de los objetos. Imaginemos que dentro del objeto persona introducimos una lista de los nombres de los hijos, el resultado sería el siguiente. No olvideís que las listas dentro de las clases también tienen que ser inicializadas.
uses Gee
class persona: Object
Nombre:string
Apellidos:string
Hijos:new list of string
init
Hijos= new list of string //inicializamos la lista de hijos así.
class casa: Object
Portal: int
Piso:int
Puerta:string
Calle:string
Persona:persona
init
Persona= new persona()
casa0:casa
e:Collection
init
var lista_de_casas = new list of casa
//Instanciamos el objeto casa
casa0= new casa
//Introducimos datos
casa0.Portal=4
casa0.Piso=3
casa0.Puerta="A"
casa0.Calle ="Calle Mayor"
casa0.Persona.Nombre="Gorka"
casa0.Persona.Apellidos="Santos Garmendia"
casa0.Persona.Hijos.add("Felipe") // introducimos los hijos dentro de la sublista
casa0.Persona.Hijos.add("Rosa")
casa0.Persona.Hijos.add("Marta")
//Introducimos en la lista
lista_de_casas.add(casa0)
// Si queremos obtener un nuevo item en la lista deberemos reinstanciar
// el objeto casa y lo podemos hacer con el mismo nombre
casa0= new casa()
casa0.Portal=6
casa0.Piso=7
casa0.Puerta="B"
casa0.Calle ="Calle Menor"
casa0.Persona.Nombre="Gaizka"
casa0.Persona.Apellidos="Sanchez Soler"
casa0.Persona.Hijos.add("Leire")
casa0.Persona.Hijos.add("Agurtzane")
lista_de_casas.add(casa0)
for e in lista_de_casas
print e.Persona.Nombre + " " +e.Persona.Apellidos
for hijo in e.Persona.Hijos // imprimimos la lista de hijos
print "Hijo:"+hijo
print e.Calle+ " "+ e.Portal.to_string()+ "-"+ e.Piso.to_string()+ " "+ e.Puerta+ " \n"
// este for tiene un warnin consigo fallo de la librería gee
No hay comentarios:
Publicar un comentario