Variables privadas (locales) y variables públicas
Además de por el tipo de datos que contienen, podemos diferenciar las variables también por su ámbito de aplicación o, por decirlo de otro modo, desde qué componentes de la estructura del algoritmo son accesibles los datos que contienen.
Aunque podemos diferenciar distintos ámbitos (Mauricio Baeza, por ejemplo, diferencia 4: local, privado, público y global), pero por ahora me limitaré a diferenciar dos por la funcionalidad que tiene dicha diferenciación en cuanto a la creación de docap: el ámbito privado (asumiendo dentro de él el concepto "variable local" en la definición de Baeza) y el ámbito público. Explicaré esta diferenciación partiendo de su aplicación práctica más simple y de utilidad más inmediata: la programación lineal empleando macros complejas vs. uso modular de macros simples (1).
Esta diferenciación es fundamental para abordar dos modos de plantear el desarrollo del código, así que la diferenciación entre variables privadas y públicas es de especial utilidad.
Como ya sabes, cuando creamos una macro (por ejemplo) en Writer para (por ejemplo) automatizar la creación de un documento, normalmente empezamos haciendo uso de la funcionalidad Grabar macro, disponible desde el menú Herramientas|Macros|Grabar macro.
También sabes que el resultado de utilizar Grabar macro es un código delimitado por Sub NombreMacro - End Sub, que contiene unas cuantas líneas comentadas y que inicia con una declaración de dos variables de tipo objeto y la correspondiente asignación de contenido a dichas variables. De este modo se identifica como referencia de las acciones el documento desde el que se llama a la macro y la instancia que ejecuta las mismas es el objeto-servicio dispatcher. Todo lo demás son funciones de ejecución de órdenes (las que graba el sistema cuando usamos el teclado mientras está activa la funcionalidad Grabar macro), las cuales pueden ser simples o directas o aplicarse sobre estructuras matriciales previamente definidas. En cualquier caso, puedes apreciar una enumeración sucesiva de elementos/acciones que refleja claramente el carácter secuencial del modelo de programación que subyace.
Frente a este procedimiento, podemos idear un uso diferente de Grabar macro que, en lugar de utilizar esta funcionalidad para generar el documento, sea empleada para generar secuencias de código que ejecutan exclusivamente una orden. Esta secuencias serán empleadas después tanto modular como secuencialmente con el objetivo de construir la secuencia de órdenes que nos interesa para desarrollar el algoritmo en su conjunto.
Mientras que en el primero de los escenarios no tiene sentido diferenciar entre variable privada y variable pública, puesto que las dos únicas sólo se presenta en una ocasión y lo hacen como privadas), cuando nos planteamos trabajar siguiendo la lógica modular, nos enfrentamos a una repetición sistemática de la misma estructura, tantas veces como macros (simples) necesitemos utilizar. En esta caso parece evidente que tanta repetición resulta innecesaria, así que aquí sí cobra relevancia la diferenciación entre variables privadas y variables públicas o, mejor dicho, podemos optar hacer uso privado de las variables de objeto y repetirlas tantas veces como sea necesario, o convertirlas en variables públicas.
¿Pero cómo se hace esto y cuáles son sus consecuencias?, ¿por qué esta conversión privado-público puede ser ventajosa? Para responder a estas cuestiones, vayamos por partes, empezando por el final, por eso del ahorro de trabajo. Un ejemplo:
- La conversión privado-público tiene sentido si las variables se seguir usando (siguen siendo accesibles) por cada una de las macros simples.
- Esta conversión garantiza precisamente la accesibilidad al contenido de esas variables desde cualquier script o macro del módulo y de cada módulo dentro de la biblioteca (library-> librería)
- La ventaja básica es la simplificación del código y la reducción del número de líneas. Manteniendo el funcionamiento autónomo de cada macro, para un programa formado por (por ejemplo) 12 macros, obtendremos un ahorro neto de 32 líneas de código, 44 si nos planteamos un funcionamiento integrado del conjunto.
- También implica un uso coherente de la modularidad, especialmente si optamos por la segunda de las opciones anteriores.
- La conversión de una variable privada en pública es tan simple como trasladar la declaración de la variable de dentro de la macro (privada o local) a fuera de la misma y (preferible) al inicio del módulo. En ambos caso (privada-pública) la declaración de las variables (en OOo Basic, pero también en VBA) se inicia con la expresión Dim (también puedes usar dim), siendo únicamente relevante la diferenciación en el posicionamiento: dentro vs. fuera de la macro.
- Extraer las variables objeto de la macro y ubicarlas al inicio del módulo.
- Crear un nuevo script cuya función consiste únicamente en asignar los objetos a las variables (ahora) públicas.
- Si deseamos garantizar el funcionamiento individual de cada macro, realizamos una llamada al script anterior al inicio de cada macro.
- Si optamos por un funcionamiento integrado del conjunto resultante de la combinación de macros que conformar nuestro docap, entonces es suficiente con realizar esta llamada desde la macro que resuma la secuencia del proceso.
Option Explicit
dim document as object
dim dispatcher as object
sub MacroParrafo1
Call VarSis
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Aquí va el texto del párrafo"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
End Sub
El texto anterior podría ser un ejemplo del proceso, repitiendo la llamada a VarSis desde cada macro individual. La alternativa (macros combinadas) supone no realizar esa llamada desde cada macro individual, pero sí desde la que gestiona la secuencia de macros que conforman el docap. La posición de la llamada a VarSis al inicio de esta macro de gestión es fundamental para el funcionamiento del conjunto.
Sub EscrituraTexto
Call VarSis
InicioPag
JustificarTexto
MacroParrafo1
MacroParrafo2
MacroParrafo3
MacroParrafo4
CentrarTexto
MacroParrafo5
MacroParrafo6
MacroParrafo7
End Sub
NOTAS
(1) La diferenciación Privada-Publica que hace Maurico Baeza (2007) en "Aprendiendo OOo Basic" resulta irrelevante para los fines de este blog, ya que la privacidad o delimitación modular de las variables privadas no es funcional según él mismo comprueba, lo que genera confusión. De ahí que yo prefiera denominar privadas a las que él denomina locales, suprimiendo la categoría variable privada (acotada al ámbito del módulo).
No hay comentarios:
Publicar un comentario
Comenta esta entrada