Crear tus propios tipos de variables
OpenOffice Basic te permite crear tus propios tipos personalizados de variables, también conocidas como estructuras, o simplemente, tipos.
Los tipos permiten ser mucho más eficientes a la hora de programar, y facilitan la tarea a la hora de modificar las macros ya realizadas.
Declarar un tipo de variable personalizada
La declaración de un tipo personalizado de variable sigue la siguiente sintaxis:
Type NombreDelTipo Propiedad1 as <TipoDeVariable> Propiedad2 as <TipoDeVariable> ... PropiedadN as <TipoDeVariable> End Type
Los tipos personalizados deben de ser declarados en un módulo, antes de la primera subrutina o función del módulo. Siguen las mismas reglas de nombrado y visibilidad que cualquier otra variable.
Veamos un ejemplo casi completo. Supongamos que deseamos crear una aplicación para gestionar una agenda de contactos.
Los contactos tienen un domicilio, así que crearemos el tipo Domicilio
Type Domicilio Direccion as String CP as Long Poblacion as String Provincia as String Pais as String End Type
Los contactos tienen unas direcciones de correo electronico, así que crearemos el tipo RedSocial
Type RedSocial eMail as String FaceBook as String Twitter as String Google as String Web as String End Type
Los contactos tienen unas teléfonos, así que crearemos el tipo Telefonos
Type Telefonos Fijo as String Movil as String Coche as String Fax as String End Type
Finalmente, definimos el tipo Contacto
Type Contacto Nombre as String Apellidos as String Nacido as Date Sexo as Boolean ' True para V, False para H Dom as Domicilio DomTrb as Domicilio Tel as Telefonos TelTrb as Telefonos Red as RedSocial RedTrb as RedSocial Obs as String End Type
Como has podido observar, dado que el tipo Contacto tiene en su estructura propiedades de tipo Domicilio,
Telefonos y RedSocial es el último en ser definido.
Declarar una variable de un tipo personalizado
Si dentro de una función o una subrutina necesitamos declara una variable de un tipo personalizado, se sigue el mismo procedimiento que para el resto de variables. Podemos definir también matrices de tipos personalizados.
Sub Main Dim MiContacto as Contacto Dim aContactos() as Contacto ... End Sub
Asignar valores a una variable de un tipo personalizado
Para asignar valores a una variable de un tipo personalizado debemos asignar valores a las propiedades que componen su estructura.
Para asignar un valor a una propiedad, escribimos el nombre de la variable seguida de un punto y el nombre de la propiedad, y a continuación, al igual que para el resto de variables, el signo de igualdad y el valor
Sub Main Dim MiContacto as Contacto MiContacto.Nombre = "Juani" MiContacto.Apellidos = "De la Rosa García" MiContacto.Nacido = "16/12/1980" MiContacto.Sexo = False MiContacto.Dom.Direccion = "Calle del pez, 24, bajo" MiContacto.Dom.CP = 10240 MiContacto.Dom.Poblacion = "Valencia" MiContacto.Tel.Movil = "666 99 99 99" MiContacto.Red.eMail = "[email protected]" End Sub
Para ahorrar teclear podemos utilizar la sentencia With - End With de Basic como se muestra a continuación:
Sub Main Dim MiContacto as Contacto With MiContacto .Nombre = "Juani" .Apellidos = "De la Rosa García" .Nacido = "16/12/1980" .Sexo = False .Dom.Direccion = "Calle del pez, 24, bajo" .Dom.CP = 10240 .Dom.Poblacion = "Valencia" .Tel.Movil = "666 99 99 99" .Red.eMail = "[email protected]" End With End Sub
Para ahorrar más todavia, la sentencia With - End With de Basic puede ser anidada, como se muestra a continuación:
Sub Main Dim MiContacto as Contacto With MiContacto .Nombre = "Juani" .Apellidos = "De la Rosa García" .Nacido = "16/12/1980" .Sexo = False With .Dom .Direccion = "Calle del pez, 24, bajo" .CP = 10240 .Poblacion = "Valencia" End With .Tel.Movil = "666 99 99 99" .Red.eMail = "[email protected]" End With End Sub
Si la variable declarada es una matriz, la forma de asignar valores es igual de sencilla:
Sub Main Dim aContactos() as Contacto Redim aContactos(5) aContactos(0).Nombre = "Antonio" aContactos(0).TelTrb.Fijo = "96 6666666" With aContactos(3) .Nombre = "Juani" .Apellidos = "De la Rosa García" .Nacido = "16/12/1980" .Sexo = False With .Dom .Direccion = "Calle del pez, 24, bajo" .CP = 10240 .Poblacion = "Valencia" End With .Tel.Movil = "666 99 99 99" .Red.eMail = "[email protected]" End With End Sub
Pasar una variable de tipo personalizado como argumento
Se puede pasar a una función o subrutina una variable de tipo personalizado declarándolo en la línea de argumentos. También pueden pasarse matrices de tipos personalizados.
Sub Main Dim MiContacto as Contacto With MiContacto .Nombre = "Juani" .Apellidos = "De la Rosa García" .Nacido = "16/12/1980" .Sexo = False With .Dom .Direccion = "Calle del pez, 24, bajo" .CP = 10240 .Poblacion = "Valencia" End With .Tel.Movil = "666 99 99 99" .Red.eMail = "[email protected]" End With PintaContacto MiContacto End Sub Sub PintaContacto( x as Contacto ) MsgBox x.Nombre & " " & x.Apellidos & chr(13) & _ iif(x.Sexo,"Nacido el ","Nacida el ") & x.Nacido & chr(13) & _ "Móvil " & x.Tel.Movil, 64 , "Datos del contacto" End Sub
Devolver un tipo de variable personalizado
Las funciones pueden devolver tipos de variables personalizados, y también matrices de tipos personalizados.
Function NuevoContacto() as Contacto Dim x as Contacto ' Inicializo los valores más habituales por defecto x.Dom.Poblacion = "Valencia" x.Dom.Provincia = "Valencia" x.Dom.Pais = "España" x.DomTrb.Provincia = "Valencia" x.DomTrb.Pais = "España" NuevoContacto = x End Function