Visibilidad (alcance) de variables
En función de cómo y dónde se declaren las variables, serán visibles en los diferentes módulos, funciones, subrutinas y diálogos que componen un programa en OpenOffice Basic. Asímismo, tendrán diferente alcance (vida).
Visibilidad y alcance en función de cómo se declaran
Además de la instrucción Dim para declarar variables al principio de un módulo, OpenOffice Basic permite utilizar las instrucciones Global, Public o Private para el mismo fin, pero con distinta visibilidad y alcance. Estas instrucciones no son admitidas dentro de una función ni subrutina.
La instrucción Dim y Public son equivalentes.
- Una variable declarada como Private al principio de un módulo es vista por todas las funciones, subrutinas de cualquier módulo de la librería, incluidos los diálogos. Aunque por lógica no debería ser así, la realidad es que se comporta del mismo modo que una variable declarada como Public.
REM ***** BASIC ***** Private MiVariablePrivate As Integer Sub Main ...
El comportamiento de las variables de tipo Private puede ser modificado mediante la instrucción CompatibilityMode(True) insertada en una función o subrutina. Al activar el modo de compatibilidad, la variable declarada como Private no será visible fuera del módulo en que fué declarada, como ilustra el siguiente ejemplo:
REM ***** BASIC ***** ' ---------------------------------------------- ' Código escrito en un módulo llamado Module1 ' ---------------------------------------------- Option Explicit private Variable as string Sub PintaVariable() CompatibilityMode(true) CargaVariable msgbox Variable ' muestra Asignado este texto en Module1 CambiarVariable msgbox Variable ' sigue mostrando Asignado este texto en Module1 End Sub Sub CargaVariable() Variable = "Asignado este texto en Module1" End Sub REM ***** BASIC ***** ' ---------------------------------------------- ' Código escrito en un módulo llamado Module2 ' ---------------------------------------------- Sub CambiarVariable Variable = "Variable ha cambiado su valor en Module2" End Sub
|
- Una variable declarada como Public al principio de un módulo es equivalente a una variable declarada con Dim al principio de un módulo. Será visible para todas las funciones y subrutinas, no sólo de ese módulo, sino de toda la librería, incluyendo los diálogos. Su alcance se define por el fin de la ejecución del programa que las utiliza, momento en que son eliminadas.
REM ***** BASIC ***** Dim MiVariablePublic_1 As Integer Public MiVariablePublic_2 As Date Sub Main ...
- Una variable declarada como Global al principio de un módulo tiene la misma visibilidad que una variable declarada como Public al principio de un módulo, pero a diferencia de éstas, la variable Global no es eliminada cuando finaliza la ejecución del programa que las utiliza, sino que mantienen su valor hasta que OpenOffice se cierre.
REM ***** BASIC ***** Global MiVariableGlobal As Double Sub Main ...
Visibilidad en función de dónde se declaran
- Las variables declaradas al principio de un módulo son visibles para todos los módulos, diálogos, funciones y subrutinas contenidas en la librería a la que pertenece el módulo.
- Las variables declaradas dentro de una función o de una subrutina, o que son declaradas como argumentos de la función o subrutina, son visibles sólo dentro de esa función o subrutina.
- Si en varios módulos se declara como Private un mismo nombre de variable, OpenOffice Basic creará una variable distinta para cada módulo.
- Si el nombre de una variable declarada dentro de una función o de una subrutina, o que es declarada como argumento de la función o subrutina coincide con el nombre de una variable declarada a nivel de módulo, eclipsará u ocultará la variable declarada a nivel de módulo, como si ésta no existiera, incluso a otras funciones o subrutinas existentes en otros módulos.
Variables declaradas como Static
Se pueden declarar variables con la instrucción Static a nivel de función y de subrutina. La variable será iniciada la primera vez que se acceda a la función o subrutina que la contiene, y mantendrá su valor aunque se finalice la función o subrutina, permaneciendo disponible para la próxima vez que se acceda a la función o subrutina.
Las variables Static son destruidas cuando finaliza el programa que las creó.
Function Contador() as long Static nCont as long nCont = nCont + 1 Contador = nCont End Function
La primera vez que se acceda a la función Contador la variable nCont se inicializará como 0, y se incrementará en uno su valor. La segunda vez que se acceda a la función, la variable nCont mantiene su valor 1, y se incrementará de nuevo en uno su valor, y así, sucesivamente hasta que se finalice el programa, momento en que será eliminada.