El objeto TList en programación

publicado en: BlitzMax, Programación | 0

El objeto TList, es un objeto prefabricado en el entorno de desarrollo de BlitzMax. Su función principal es almacenar información en forma de lista al igual que sucede con las colecciones. Sin embargo solo se usan para almacenar objetos.

Para entender esto piense en el objeto archivador de la oficina. Este objeto tiene gavetas y dentro de ellas, se almacenan otros objetos, carpetas, documentos, etc.

Usando el objeto TList

En primer lugar para usar estos tipos de objetos definimos una variable con el tipo “TList” y mediante la palabra reservada New creamos el objeto en si.

Local archivador:TList = New TList

Así de sencillo ya tenemos nuestro objeto lista creado en la memoria de la computadora. Ahora bien, todo lo que se crea debe usarse, si no sería desperdicio de recursos. Estos tipos de objetos almacenan otros objetos y por eso usamos la analogía de un archivador de oficina.

Ahora bien, vamos a crear objetos para almacenar en en ese objeto.

Type CFruta

    Private Field tipo:String
    
    Public Method New( tipo:String = "Banana" )
            self.tipo = tipo
    End Method
         

End Type

Local miBanano:CFruta = New CFruta

Local archivador:TList = New TList

Por defecto hemos creado un objeto fruta de la clase banana, y este objeto lo procedemos a meter en la objeto lista de la siguiente manera.

archivador.AddLast( miBanano )

Es una oficina bien extraña, ¿No?, estamos llenando un archivador de frutas. El comando de la lista creada “AddLast” implica que se anexa al último puesto de la lista. Si necesita saber todos los comandos de la lista, precione F1 sobre la palabra reservada “Tlist”

Pero esto no tiene sentido, así que vamos a crear 100 bananos y los almacenamos en la lista.

Local bananos:CFruta[100]

For Local b:Byte  = 0 To 99
       bananos[b] = new CFruta
Next
          

Mediante el bucle For Next que inicia una variable y la lleva a su número máximo de 99 creamos 100 bananas. Mucho mejor que escribir 100 líneas de código alusivas cada una para crear un solo objeto. Ahora bien, la idea es meter todos esos bananos en la lista archivador. Esto igualmente lo hacemos mediante el bucle anteriormente mencionado.

Local bananos:CFruta[100]

For Local b:Byte  = 0 To 99
       bananos[b] = new CFruta
       miArchivador.AddLast( banano[b])
Next

Lo anterior implica que cada vez que se crea un objeto banano, se agrega al objeto lista cada vez que se pasa por el bucle “For Next”. Entonces nuestra lista ya contiene 100 objetos.

Procesando los objetos de las listas

Indudablemente no solo se trata de meter objetos a la lista, toca hacer algo con ellos para que esto sea mas práctico. Así que continuando con el ejemplo de las bananas, vamos a agregar una nueva propiedad al tipo CFruta. Esta propiedad miembro hace referencia a su color.

Type CFruta

    Private Field tipo:String
    Private Field color:String 
    Public Method New( tipo:String = "Banana", color:String = "Verde" )
            self.tipo = tipo
            self.color = color
    End Method
  
    Public Method SetColor( color:string )
          self.color = color
    End Method 

    Public Method GetColor:String()
              Return ( self.color )
    End Method
         
End Type

La nueva propiedad miembro denominada color implica el estado de madurez de los bananos, donde todos por defecta se crean de un color verde. Además hemos agregado dos métodos públicos, uno para recolectar el valor de estado de madurez de la fruta al mirar su color y otro para asignar su color.

Teniendo esto en cuenta que los 100 objetos banano se han metido en la lista y su color es verde, debemos pensar que en el mundo real con el pasar del tiempo, los bananos cambian su color y maduran o se pudren. Ahora bien, podríamos tomar cada banano y asignar su color, pero hacer 100 veces esto es extenuante.

Así que vamos a usar una variante del bucle For, la cual es usar en lugar de la palabra “To” la palabra reservada “EachIn” que lo que hace es buscar en la lista todos los elementos y procesarlos.

For Local misBananos:CFruta = EachIn archivador

           misBananos.SetColor("Negro")
Next

En este punto, el que metió los bananos en el archivador se le olvidaron y con el pasar del tiempo esas frutas se pudrieron tomando un color negro. Evitamos escribir 100 líneas de código para establecer cada color para cada banano.

Ahora bien, vamos a recuperar ese color de los bananos igualmente mediante un bucle For EachIn.

For Local misBananos:CFruta = EachIn archivador

           print( misBananos.GetColor())
Next

¿Y para que sirve todo esto de listas y objetos?

Para finalizar, recuerde que en un programa se pueden llegar a manejar muchos, pero muchos datos. Objetos que cada uno hace una tarea especifica y que sería muy engorroso dirigirnos uno por uno para que hagan algo. Para entender de esto la mejor manera posible piense en un eterno que simula lluvia.

Para simular un entorno lluvioso se necesitarían miles de objetos donde cada uno representa una gota de agua, si no fuera por el objeto lista, nos dirigiríamos a cada objeto por separado para decirle que hacer, en que ángulo caer al suelo, a que velocidad. Sin embargo con los objetos listas, nos dirigimos a todos como un solo enjambre de gotas y establecemos su forma, su dirección, su velocidad, su reacción al tocar el suelo.

Todo esto presenta un gran poder y flexibilidad al trata con gran cantidad de objetos y por ende deberá siempre que pueda usar este sistema que ayudará a simplificar su trabajo como programador y lo hará mucho mas eficiente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *