Está en la página 1de 4

Tipos Personalizados

Tuplas
Introducción
Según la Wikipedia1, “una tupla es un objeto que bien puede tener datos o diversos objetos”. Si
prestamos atención a esta definición, podemos deducir que las tuplas serán la solución a una
problemática ya planteada en las matrices: ¿qué ocurre si tenemos que almacenar, dentro de
un mismo sitio, tipos de datos no homogéneos?

Hasta ahora, si teníamos que almacenar una colección de datos, siempre tenía que ser
mediante una colección de elementos que tenían en común la tipología:

Dim Numeros() as Integer


Dim Palabras(10) as String
Dim Puntuaciones(0 To 5) As Double

No obstante, no será la primera vez que tengamos que almacenar, conjuntamente, datos
diversos. Por ejemplo, en el caso de tener que trabajar, en memoria, con datos de personas, de
notas de alumnos, etc

La tupla se trabaja en memoria


Pongamos un primer ejemplo en el que tengamos que trabajar en memoria, con datos de
índole diversa, como pueden ser los datos correspondientes a una serie de coches.

Es muy sencillo hacerse a la idea que, de un coche, necesitaremos trabajar con Matrícula,
Marca, Modelo, Version, Cilindrada, Puertas y, por ejemplo, la fecha de la primera
matriculación.

Supongo que cualquiera de nosotros empieza en estos momentos a pensar en una serie de
variables en las que poder almacenar la información, incluso me atrevo a aventurar que alguien
llegará a pensar en algún modo de tener la información dispuesta en una serie de matrices más
o menos ordenadas. ¿Realmente es un sistema práctico? Tampoco vale la respuesta que
responsabilice a los motores de base de datos del almacenamiento de estas estructuras, sobre
todo en un momento en el que los sistemas se preocupan más de trabajar con datos
desconectados de la base de datos para aumentar la rentabilidad y la concurrencia.

Resumiendo. Por extraño que parezca, aun a pesar de las bases de datos actuales, necesitamos
tener estructuras no uniformes de datos de memoria y así poder trabajar con ellas.

Creación de una tupla o tipo personalizado


Visual Basic define los tipos de datos de una manera bastante sencilla:

Type NombreTipo
... Elementos
End Type

1
http://es.wikipedia.org/wiki/Tupla

Jesús Velasco 1/4


Tipos Personalizados

Por tanto, un ejemplo de un tipo de datos Coche, tal como definíamos en el ejemplo anterior,
sería algo así como:

Type Coche
Matricula As String
Marca As String
Modelo As String
Version As String
Cilindrada As Long
FechaMatriculacion As Date
End Type

El trabajo con las tuplas


Una vez creado el tipo personalizado, bastará con tratarla como si se tratara de un elemento
más dentro del ámbito del resto de tipos.

En el siguiente ejemplo, haciendo uso del tipo Coche, se crean dos variables, que equivalen a
dos coches distintos:

Sub Main()
' Dimensionado de matrices
Dim c1 As Coche
Dim c2 As Coche

' Llenado de la primera variable c1


c1.Matricula = "AAA"
c1.Marca = "AAA"
c1.Modelo = "AAA"
c1.Version = "AAA"
c1.Cilindrada = 111
c1.FechaMatriculacion = #1/1/2001#

' Llenado de la segunda variable.


' La instrucción With es más cómoda.. jeje
With c2
.Matricula = "BBB"
.Marca = "BBB"
.Modelo = "BBB"
.Version = "BBB"
.Cilindrada = 222
.FechaMatriculacion = #2/2/2002#
End With

MsgBox "Marca del primer coche: " & c1.Marca


End Sub

Jesús Velasco 2/4


Tipos Personalizados

Trabajo real con Tuplas


Una vez hemos visto que podemos tratar este tipo de estructuras como una entidad única, tan
sólo nos quedará comprobar que es un tipo de dato más cuando en cualquier situación

Así, en apuntes hemos estado trabajando con matrices. Gracias a estas matrices, podíamos
tener, de forma más o menos ordenada, una colección de datos de una mismo tipo. Si ahora
extrapolamos esta misma “definición” a las tuplas, podemos encontrarnos que podemos crear
matrices de estructuras (o tuplas):

Private Sub InicializaMatriz()


' Creación de la matriz
Dim Coches(0 To 2) As Coche

' Primer elemento de la matriz. Cada elemento es un coche


Coches(0).Matricula = "AAA"
Coches(0).Marca = "AAA"
Coches(0).Modelo = "AAA"
Coches(0).Version = "AAA"
Coches(0).Cilindrada = 111
Coches(0).FechaMatriculacion = #1/1/2001#

' Con la estructura With hacemos lo mismo, pero más cómodo


With Coches(1)
.Matricula = "BBB"
.Marca = "BBB"
.Modelo = "BBB"
.Version = "BBB"
.Cilindrada = 222
.FechaMatriculacion = #2/2/2002#
End With
End Sub

Incluso, en caso de ser necesario, puede tratarse una estructura de datos (o tupla, como la he
llamado en varias ocasiones) como si se tratase de una sola variable. De esta manera, el paso
de información entre métodos es mucho más cómodo.

En el siguiente ejemplo se intenta reconstruir una “aplicación” que simula la entrada de datos
manual por parte del usuario y su posterior ejecución y resultado.

Option Explicit
Option Base 0

Private Const Titulo As String = "Cálculo del área de un rectángulo"

Public Type Rectangulo


Ancho As Double
Largo As Double
End Type

Public Sub Main()


' Control de errores
On Error GoTo Main_Error

' Creación de la variable


Dim Rect As Rectangulo

Jesús Velasco 3/4


Tipos Personalizados

' Llamada a la rutina de solicitud de datos


Rect = SolicitaDatos()

' Impresión de resultados


Call MuestraAreaRectangulo(Rect)

' Control de errores


On Error GoTo 0
Main_Sal:
Exit Sub

Main_Error:
MsgBox Err.Description
Resume Main_Sal:
End Sub

Private Function SolicitaDatos() As Rectangulo


Dim retVal As Rectangulo

' Se solicitan los datos del usuario


With retVal
.Ancho = InputBox("Introduce el ancho", Titulo)
.Largo = InputBox("Introduce el largo", Titulo)
End With

' Valor de retorno


SolicitaDatos = retVal
End Function

' Ojo. NO se pueden pasar Tuplas por valor, sólo por referencia.
Private Sub MuestraAreaRectangulo(ByRef Rect As Rectangulo)
Dim area As Double
area = Rect.Ancho * Rect.Largo
MsgBox ("El área del rectángulo es: " + Str(area))
End Sub

Como podemos apreciar, se podría haber hecho exactamente lo mismo traspasando las
variables, no obstante, si se quiere ver realmente la efectividad de este tipo de estructuras,
podríamos recrear el mismo “programilla” con el ejemplo de los coches de antes.

¿Qué modificaciones haríamos usando variables independientes y qué modificaciones


deberíamos hacer usando tuplas?.

Jesús Velasco 4/4

También podría gustarte