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

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
  ...


Señal Nota.png

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


Al cambiar el modo de compatibilidad a True, la subrutina CambiarVariable del Module2 no puede alcanzar la variable declarada en el Module1.

Si cambiamos el modo de compatibilidad a False, sí que podrá ver la variable.


  • 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.

Modificada el 28 jul 2013 21:18.   Visitas: 6177