Visibilidad de las funciones y subrutinas

La visibilidad define si una función o subrutina puede ser llamada y utilizada por otro módulo de una librería.


OpenOffice Basic admite dos formas de declarar una función o una subrutina: como Private (modo por defecto) o como Public.


En lenguaje BASIC, si un procedimiento es declarado Private sólo debería ser visible dentro de su mismo módulo, y no puede ser llamado desde otros módulos. En cambio, si es declarado como Public debería ser visible en cualquier módulo de la librería.


Para declarar un procedimiento (función o subrutina) como PRIVATE se antepone esta palabra a la palabra clave inicial Sub o Function. Como es el modo por defecto, podemos declarar el procedimiento sin indicar esta palabra, como ves en los ejemplos a continuación.


Function MiFuncion()
' Líneas de código
End Function


Private MiFuncion()
' Líneas de código
End Function


Para declarar un procedimiento (función o subrutina) como PUBLIC se antepone esta palabra a la palabra clave inicial Sub o Function, como ves en el ejemplo a continuación.


Public MiFuncion()
' Líneas de código
End Function


En OpenOffice Basic por defecto todas las funciones o subrutinas de un módulo se declaran como PRIVATE, pero pueden ser utilizadas por cualquier otro módulo de la librería, a diferencia de otros dialectos de BASIC.


Para comprender el resto de este apartado necesitarás conocer lo que se dice en el punto Opciones y directivas del compilador, que tratamos más adelante.


Visibilidad sin activar el modo compatibilidad

En otros dialectos de Basic, al declarar una función o subrutina como Private (modo por defecto) se impide la visibilidad de la misma fuera del módulo donde ha sido declarado, siendo necesario declararla como Public para que pueda ser llamada desde otros módulos o diálogos de la librería.


Señal Nota.png

No es así en OpenOffice Basic, donde independientemente del modo en que sean declaradas siempre son tratadas como Public, o lo que es lo mismo, son visibles desde cualquier módulo o diálogo de la librería


El siguiente ejemplo ilustra la afirmación que acabamos de realizar:


REM  *****  BASIC  *****
' --------------------------------
' Código escrito en el Module1
' --------------------------------
Option Explicit
 
Sub Pinta()
  Msgbox FuncionPrivada( "Modulo1" )
  msgbox FuncionEnModulo2  ' NO dará un mensaje de error
End Sub
 
Private Function FuncionPrivada( c as String ) As string
  FuncionPrivada = "Texto asignado en " & c
End Function
 
 
REM  *****  BASIC  *****
' --------------------------------
' Código escrito en el Module2
' --------------------------------
function FuncionEnModulo2
  ' FuncionPrivada es vista desde este modulo pese a ser declarada como Private
  FuncionEnModulo2 = FuncionPrivada( "Module2" )
End function



Visibilidad activando el modo compatibilidad

Si se activa el modo de compatibilidad (dentro de una función o subrutina y a nivel de módulo) se fuerza a un comportamiento que tampoco es el mismo que en los otros dialectos de Basic, pues ahora las funciones se comportan como Private independientemente de cómo sean declaradas, por lo que no son vistas por los otros módulos ni diálogos de la librería, como se muestra en el siguiente ejemplo:


REM  *****  BASIC  *****
' --------------------------------
' Código escrito en el Module1
' --------------------------------
Option Explicit
Option Compatible ' Activado a nivel de módulo
 
Sub Pinta()
  CompatibilityMode(True)  ' y activado a nivel de procedimiento
  Msgbox FuncionPrivada( "Modulo1" )
  msgbox FuncionEnModulo2  ' dará un mensaje de error
End Sub
 
Private Function FuncionPrivada( c as String ) As string
  FuncionPrivada = "Texto asignado en " & c
End Function
 
 
REM  *****  BASIC  *****
' --------------------------------
' Código escrito en el Module2
' --------------------------------
function FuncionEnModulo2
  ' FuncionPrivada NO es vista desde este modulo por ser declarada como Private
  ' y activar el modo compatible a nivel de módulo y de procedimiento
  FuncionEnModulo2 = FuncionPrivada( "Module2" )
End function



Activar o no activar el modo de compatibilidad

Podemos concluir con este resumen:


  • Las tres formas de declaración de la función mostradas en el código situado justo debajo de estas líneas son equivalentes para OpenOffice Basic.
Function MiFuncion()
  ...
End Function
Private MiFuncion()
  ...
End Function
Public MiFuncion()
  ...
End Function
  • No está activado el modo de compatibilidad a nivel de módulo y de procedimiento: En los tres casos serán tratadas como Public y serán visibles por todos los módulos y diálogos de la librería.
  • Sí está activado el modo de compatibilidad a nivel de módulo y de procedimiento: En los tres casos serán tratadas como Private y no serán visibles por los demás módulos y diálogos de la librería.
Modificada el 28 jul 2013 21:04.   Visitas: 6133