martes, 18 de diciembre de 2012

Ambito de una variable

En primer lugar definiremos que es un ámbito:

Definición: Espacio comprendido dentro de unos límites determinados. El ámbito de una variable es el contexto dentro del que la variable está definida.
 
En power Builder existen 6 tipos de ámbitos: Local, Instancia, Shared, Global, Local Externo, Global Externo.

-->
Ámbito de la variable
declaración
Visibilidad
Tiempo de vida
Local
Script
Sólo  el script en el que se declara
Hasta que el script termine
Instancia
Instance Variables
Para todos los scripts dentro de una instancia simple del objeto en que es declarado y opcionalmente a la entera aplicación. Los siguientes tipos de objetos pueden tener variables de instancia: Ventana, aplicación, objeto de usuario y menú.
Hasta que la instancia del objeto se cierre.
Compartida
Shared Variables
Para todos los scripts dentro de las instancia  de los objetos en el que es declarado . Los siguientes tipos de objetos pueden tener variables de instancia: Ventana, aplicación, objeto de usuario y menú.
Hasta que termine
Global
Global Variables
Para todos los scripts en una aplicación
Hasta que la aplicación termine.
FUNCIONES EXTERNAS
Global y External functions
Declaración de funciones fuera del ámbito de Power Builder como lo son las FUNCIONES API DE WINDOWS
Hasta que termine la aplicación.
 
Para Local y Global Externo se usan cuando trabajamos con librerias o DLL de terceros. En nuestro caso dejaremos para despues este estudio.

Para nuestro ejemplo practico, crearemos una WorkSpace, una aplicación y una ventana, el nombre lo dejo a su criterio, En mi caso lo llame: w_instancia. Y diseñamos la siguiente ventana:

Insertaremos 4 SingleLineEdit , 4 StaticText, y 4 CommandButton. Pondremos los nombres a los controles: Sle_local, Sle_instancia, Sle_shared, Sle_global; y para los botones: cb_Local, cb_Instancia, cb_Shared, cb_Global.

En el botón Cb_local, escribimos el siguiente código:

Luego nos situamos en la pesataña donde dice: Declare Instance Variables.


Le damos click y escribimos: int ii_cont= 1, en esta parte sólo se declaran las variables. Luego en el botón cb_instancia, ponemos el siguiente Script:

Para declarar variables Shared, tenemos que buscarlo en el combo desplegable donde dice: Shared Variables. En el botón cb_shared, ponemos el siguiente Script:


Luego cambiamos la declaración de varibales a global: Global Variables, y declaramos:gi_cont = 1. Luego insertamos en el boton cb_global lo siguiente:

 Pero antes de eso, creamos esta ventana llamada: w_global, para que no nos salga error. Y lo diseñaremos de esta forma:


y ponemos el código en el boton global. en la ventana: w_Global. Estamos usando el mismo nombre para el control commandbutton. Nos damos cuenta que ya no declaramos la variable global en la ventana w_global, porque ya no es necesario ya que se declaro en la otra ventana y esa variable se usa para todo el proyecto.



Luego insertamos en las dos ventanas en el evento Open, los siguientes Scripts.

W_instancia:

W_global:

No nos olvidemos de escribir el código para abrir la ventana w_instancia en el evento de la aplicación, sin esto no correra el programa:



Explicación del Programa:

Lo que hemos echo es un programa donde se muestra el incremento de una variable llamada: cant donde es de tipo integer, y tiene 4 ámbitos: Local, Instancia, Shared y Global.

Cuando una variable es de ámbito Local, el ciclo de vida de la variable seria: se declara dentro del control, se crea en él, se procesa en el control y se destruye en el control. Es por eso que cuando le doy click al boton local, sólo me sale 1, y no aumenta porque siempre se crea en uno y muere siendo uno.


Cuando una variable es de ámbito Instancia, el ciclo de vida es asi: Se declara y crea en la ventana, se procesa en toda la ventana y se destruye cuando se cierra la ventana. Es por eso que cuando le das click al boton instancia, se incrementa.


Cuando una variable es de ámbito Shared, el ciclo de vida seria: Se declara y crea en la ventana, se procesa en la ventana, y se destruye cuando se cierra el proyecto. Es por eso que cuando le das click aumenta en la ventana, al momento de cerrarla, esa variable no se destruye ya que si vuelves a abrir aquella ventana, te saldra el valor ultimo que tenia el si_cont.


Y cuando es Global, es a nivel de todo el proyecto. El ciclo de vida es: Se declara y se crea en el proyecto, se procesa en todo el proyecto, y se destruye cuando se cierra el proyecto. Es por eso que esa variable pasa de ventana en ventana y aumenta en las dos ventanas de este ejemplo.


Gracias por su tiempo. Espero que les ayude.