Declarando y usando variables
Del dato a la información
Cuando se programan macros, debemos tener muy presente este sencillo diagrama:
Si analizas cada programa de ordenador que usas, veras que en mayor o menor medida, cumple el flujo anterior. Cada uno de estos tres pasos se pueden dividir en muchos más, pero esa división tu mismo la irás notando y desglosando conforme profundices en este o cualquier otro lenguaje, veamos un sencillo ejemplo:
- Solicitamos que el usuario capture su nombre completo (Entrada)
- Contamos el número de letras (o palabras) que contiene (Proceso)
- Mostramos el resultado obtenido (Visualización)
Pero, ¿qué ocurre si además del nombre solicitamos que capture su fecha de nacimiento? Tal vez podríamos obtener además del número de letras o palabras:
- El día de la semana en que nació
- Cuantos días lleva vivo
- Cuantos años tiene
- Cuantas vocales contiene el nombre
- ¿Se te ocurren otros datos que puedas obtener?
Observa como con tan sólo dos datos podemos obtener mucha información. Esta sencilla ecuación es la diferencia entre un programa eficiente y uno que no lo es.
Los buenos programas manipulan eficientemente los datos para darnos información, y desde el flujo de los datos hasta la información, existen dos entes que son determinantes para la calidad de la información obtenida:
- uno es la computadora, la que, normalmente, sólo provee de velocidad
- el otro es el programador, que pone toda su inteligencia al servicio del proceso de convertir los datos en información que permita tomar decisiones.
De acuerdo a los dos diagramas anteriores, la finalidad de toda macro (o programa), es obtener datos, ya sea leyéndolos de algún origen o solicitándolos al usuario.
Retomando el sencillo ejemplo con el que empezamos este capitulo, vamos a solicitarle al usuario que nos proporcione su nombre, lo cual lograremos con la función InputBox.
Una función es como un procedimiento, pero a diferencia de éste, la función devuelve (retorna) un valor.
Qué es y para que se utiliza una variable
Lo más habitual es que ese valor devuelto se almacene en algún lugar para que esté disponible y poder manipularlo.
Así que en primer lugar tenemos que aprender a almacenar datos, aunque sea de forma temporal, para poder manipularlos. El lugar donde se almacenan es en la memoria del ordenador (la llamada memoria RAM).
Para ello tendremos que darle un nombre a una porción de dicha memoria, a esta porción que estamos nombrando, le llamaremos variable. Se denomina así precisamente por que su valor o contenido puede variar durante los procesos que realice nuestra macro.
Resumiendo, los datos que obtengamos los guardamos “temporalmente” en variables, siguiendo el esquema de esta sencilla ecuación, que iremos ampliando según vayamos avanzando en nuestro curso:
Veamos un ejemplo de esto:
Sub MostrarNombre
'Asignamos un valor a una variable
'Una de mis novias
Nombre = "Nicole Kidman"
'Mostramos el valor de la variable
MsgBox Nombre
End Sub
Observa como en la linea.
Nombre = "Nicole Kidman"
Estamos asignando el “dato” “Nicole Kidman”, a la “variable” Nombre.
Reglas de los nombres de variables
El nombre de las variables, sigue las mismas reglas que el nombre de las macros:
- no pueden llevar espacios
- no pueden empezar con un número
- no poder incluir caracteres especiales
Veamos algunos ejemplos de nombres de variables:
Direccion | Correcto |
Telefono2 | Correcto |
FechaDeNacimiento | Correcto |
Fecha Nacimiento | Incorrecto (tiene un espacio) |
3Fax | Incorrecto (comienza por un número) |
Dirección | Incorrecto (no se permiten caracteres especiales) |
Calle,Numero | Incorrecto (no se permiten comas ni puntos) |
Declaración implícita de variables
Simplemente con usar el nombre correcto de una variable, OOo Basic hace uso de ella. Esta forma de usar variables se conoce como, declaración implícita, por que al asignarle un valor por primera vez a una variable, el lenguaje reserva el espacio en memoria para su uso.
Esta forma de usar las variables no es recomendable, ya que tal y como las macros se hacen más grandes y complejas, la probabilidad de que se produzcan errores en el código aumenta de forma exponencial.
Declaración explícita de variables
En contraste, es más eficiente y mucho más claro si desde el inicio de una macro se declaran las variables que se utilizarán. Esta segunda forma de usar las variables se denomina, declaración explícita. Mediante esta forma de declaración, nosotros somos los que le indicamos al lenguaje qué variables son las que usaremos.
Para declarar de manera explícita una variable utilizaremos la palabra clave Dim.
Veamos un ejemplo:
Sub DeclarandoVariables
'Declaramos cuatro variables
Dim Direccion
Dim Telefono2
Dim FechaNacimiento
Dim Edad
'Mas código
End Sub
Con la instrucción Dim, estamos diciendo “reserva un espacio en la memoria que se llame Direccion para que pueda almacenar y manipular ese dato”, y efectivamente, el lenguaje lo hará para nosotros.
Es conveniente que el nombre de las variables inmediatamente nos dé una idea acerca del dato que guardaremos en ella.
Tipos de variables
Ahora pensemos en qué es lo que almacenaremos en cada variable. En el caso de la variable Direccion, normalmente guardará un texto; la variable FechaNacimiento una fecha; la variable Edad un número.
Tal y como ahora están declaradas las variables, se puede guardar cualquier “tipo” de dato (texto, numero, fecha, etc) en ellas, dado que no hemos especificado más.
Si no especificamos el tipo de dato que almacena una variable, ésta se crea de tipo variant, y permite almacenar cualquier tipo de dato. Por ejemplo:
Sub VariablesTipoVariant
Dim UnDato
UnDato = "Esto es un texto" 'Guardamos un texto
MsgBox UnDato
UnDato = 12345678 'Guardamos un numero
MsgBox UnDato
UnDato = "15/01/1974" 'Guardamos una fecha
MsgBox UnDato
End Sub
Al declarar las variables podemos especificar el tipo de dato que van a almacenar. La recomendación es que, en lugar de utilizar variables tipo Variant, le indiquemos explícitamente al lenguaje qué tipo de datos guardaremos en ella.
Para declarar el tipo de dato que almacenará una variable, tras la declaración de su nombre utilizaremos la palabra clave As, y a continuación, el tipo de variable. Por ejemplo:
Sub DeclaracionExplicitaDeVariables
Dim Direccion As String 'Variable tipo texto
Dim Edad As Integer 'Variable tipo numero entero
Dim Fecha As Date 'Variable tipo fecha
Direccion = "Parque San Toribio N° 24"
Edad = 35
MsgBox Direccion
MsgBox Edad
End Sub
Un error frecuente en programadores noveles es declarar variables del siguiente modo.
Dim Nombre, Paterno, Materno As String
Aparentemente, las tres variables anteriores son de tipo String, pero no es así, solo la variable Materno es de este tipo, Nombre y Paterno serán creadas de tipo Variant.
Para que las tres sean de tipo String tienen que declararse del siguiente modo.
Dim Nombre As String, Paterno As String, Materno As String
Esta es la lista completa de tipos de variables que puedes usar en OOo Basic:
String | Texto | Hasta 65,535 caracteres |
Byte | Entero | Enteros
entre 0 y 255 |
Integer | Entero | Enteros
entre -32.768 y 32.767 |
Long | Entero largo | Enteros
entre -2.147.483.648 y 2.147.483.647 |
Single | Simples | Precisión simple y coma flotante
negativos entre -3,402823 x 1038 y -1,401298 x 10-45 positivos entre 1,401298 x 10-45 y 3,402823 x 1038 |
Double | Dobles | Precisión doble y coma flotante
negativos entre -1,79769313486232 x 10308 y -4,94065645841247 x 10-324 positivos entre 4,94065645841247 x 10-324 y 1,79769313486232 x 10308 |
Currency | Moneda | Máximo de 15 números antes del signo decimal y cuatro después de él.
entre -922337203685477.5808 y +922337203685477.5807 |
Boolean | Lógica | Solo puede contener valores True (verdadero) o False (falso) |
Date | Fecha | Desde el 01-mar-0200 al 31-dic-9999 |
Variant | Variante | Cualquier valor, tipo de declaración predeterminado |
Object | Objeto | Para hacer referencias a objetos |
Error por desbordamiento
Es importante que recuerdes que si sobrepasas estos valores, se generará un error en tiempo de ejecución que se llama desbordamiento.
Option Explicit
Veamos este nuevo ejemplo de una macro:
Sub DameTuNombre
Dim Nombre As String
'Otra de mis novias
Nombre = "Miranda Otto"
MsgBox Nombres
End Sub
¿Que ocurre al ejecutarla?, efectivamente no nos muestra nada en el cuadro de mensaje.
Es debido a que para el lenguaje la variable Nombre es diferente de la variable Nombres; por lo tanto, a la variable Nombres no le hemos asignado ningún valor.
En este ejemplo es bastante evidente el error (una pequeña s de diferencia); cuando se programa y haces uso de unas cuantas decenas de variables declaradas, esto no es tan evidente a simple vista. Como comentamos antes, es el riesgo que podemos correr dado que OOo Basic admite la declaración implícita de variables.
Para minimizar este tipo de errores, disponemos de la instrucción Option Explicit. Ésta nos obliga a declarar (utilizando Dim) cualquier variable antes de usarla, impidiendo la declaración implícita de variables.
Debe ser escrita en la primera línea del modulo (solo una vez por modulo, pero en cada uno de los módulos). Nuestra anterior macro quedará así.
Option Explicit
Sub DameTuNombre
Dim Nombre As String
'Otra de mis novias
Nombre = "Miranda Otto"
MsgBox Nombres
End Sub
Vuelve a ejecutar esta macro y observa que ahora nos muestra el siguiente mensaje.
Como ves el mensaje es muy claro: Variable no definida, es decir, no hemos usado la instrucción Dim para declararla.
Observa en la imagen (el subrayado rojo): el IDE nos indica con una flecha la línea donde ocurrió el error.
Recomendamos utilizar siempre Option Explicit al programar en OOo Basic
Asignar el valor devuelto por una función a una variable
Al inicio de este tema vimos que una macro (o programa) suele empezar con la solicitud de algún dato al usuario (generalmente). También vimos que este dato (o datos) se guardan temporalmente en variables (generalmente), y que la instrucción básica para ello es:
y como ejemplo mostramos.
Sub MostrarNombre
'Asignamos un valor a una variable
'Una de mis novias
Nombre = "Nicole Kidman"
'Mostramos el valor de la variable
MsgBox Nombre
End Sub
Existe otra forma de asignar un valor a una variable:
En donde Función, es cualquier instrucción que nos “retorne” un valor, veamos un ejemplo de la función InputBox.
Sub MiNombre
Dim Nombre As String
Nombre = InputBox("¿Cual es tu nombre?")
MsgBox Nombre
End Sub
Al ejecutar, mostrará el siguiente cuadro de dialogo:
Y al escribir tu nombre y dar clic en Aceptar, mostrará lo que hayas escrito.
Presentar los datos procesados
Para cerrar el circulo, y comprobar que si funciona el primer diagrama de este capitulo, “hagamos algo” con el dato: veamos cuantas letras tiene.
Utilizaremos la función Len, que devuelve los caracteres que tiene una cadena. Nuestra macro completa quedaría así:
Sub MiNombre
Dim Nombre As String
Dim NumeroDeLetras As Integer
Nombre = InputBox( "¿Cual es tu nombre?" ) 'Entrada de datos
NumeroDeLetras = '''Len'''( Nombre ) 'Proceso de datos
MsgBox NumeroDeLetras 'Visualización de resultado
End Sub
Observa como se cumple el flujo del diagrama mostrado al inicio de este capítulo; es un gran simplificación, pero nos es bastante útil para nuestros propósitos.
Si tienes dudas acerca de lo aquí explicado, tienes algún problema con AOO, o quieres ampliar la información, no dudes en dirigirte al {{#switch: macros |
indice = Índice del Foro Oficial en español de Apache OpenOffice | writer = Foro Oficial en español de Apache OpenOffice para Writer | calc = Foro Oficial en español de Apache OpenOffice para Calc | impress = Foro Oficial en español de Apache OpenOffice para Impress | draw = Foro Oficial en español de Apache OpenOffice para Draw | base = Foro Oficial en español de Apache OpenOffice para Base | math = Foro Oficial en español de Apache OpenOffice para Math | macros = Foro Oficial en español de Apache OpenOffice para Macros y API UNO | extensiones = Foro Oficial en español de Apache OpenOffice para Extensiones | comunidad = Foro Oficial en español de Apache OpenOffice para la Comunidad | macros
}} |