Difference between revisions of "ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/ElLenguajeOOoBasic/DeclararVariables"

From Apache OpenOffice Wiki
Jump to: navigation, search
Line 352: Line 352:
  
 
     'Otra de mis novias  
 
     'Otra de mis novias  
     Nombre <nowiki>=</nowiki> "Miranda Otto"
+
     Nombre = "Miranda Otto"
 
     MsgBox Nombres
 
     MsgBox Nombres
 
  End Sub
 
  End Sub
Line 386: Line 386:
 
     'Asignamos un valor a una variable
 
     'Asignamos un valor a una variable
 
   'Una de mis novias
 
   'Una de mis novias
     Nombre <nowiki>=</nowiki> "Nicole Kidman"
+
     Nombre = "Nicole Kidman"
 
     'Mostramos el valor de la variable
 
     'Mostramos el valor de la variable
 
       MsgBox Nombre
 
       MsgBox Nombre
Line 406: Line 406:
 
  Dim Nombre As String
 
  Dim Nombre As String
  
     Nombre <nowiki>=</nowiki> InputBox("¿Cual es tu nombre?")
+
     Nombre = InputBox("¿Cual es tu nombre?")
 
     MsgBox Nombre
 
     MsgBox Nombre
 
  End Sub
 
  End Sub
Line 439: Line 439:
 
  Dim NumeroDeLetras As Integer
 
  Dim NumeroDeLetras As Integer
  
     Nombre <nowiki>=</nowiki> InputBox( "¿Cual es tu nombre?" ) 'Entrada de datos
+
     Nombre = InputBox( "¿Cual es tu nombre?" ) 'Entrada de datos
     NumeroDeLetras <nowiki>=</nowiki> '''Len'''( Nombre )            'Proceso de datos
+
     NumeroDeLetras = '''Len'''( Nombre )            'Proceso de datos
 
     MsgBox NumeroDeLetras                      'Visualización de resultado  
 
     MsgBox NumeroDeLetras                      'Visualización de resultado  
 
  End Sub
 
  End Sub

Revision as of 06:45, 23 August 2013

Editing.png Esta página está en estado borrador.

Del dato a la información

Cuando se programan macros, debemos tener muy presente este sencillo diagrama:


ES.StarBasic.ElLenguajeOOoBasic.006.png


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.


ES.StarBasic.ElLenguajeOOoBasic.005.png


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:


Variable = Dato


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:


Tipo
Descripción
Valores que puede contener
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.


Template:Documentation/Note


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.


ES.StarBasic.ElLenguajeOOoBasic.004.png


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:


Variable = Dato


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:


Variable = Función


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:


ES.StarBasic.ElLenguajeOOoBasic.003.png


Y al escribir tu nombre y dar clic en Aceptar, mostrará lo que hayas escrito.


ES.StarBasic.ElLenguajeOOoBasic.002.png


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.



ES.Plantillas.Logo foro es.png
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

Foro Oficial en español de Apache OpenOffice para Macros y API UNO

Personal tools