Uso de cookies

Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continúa navegando, consideramos que acepta su uso. Para obtener más información o bien conocer cómo cambiar la configuración lea nuestra Política de cookies

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
Modificada el 28 jul 2013 21:56.   Visitas: 5742