5
 ¿Qué es una variable local? La variable local es, en informática, la variable a la que se le otorga un ámbito local. Tales variables sólo pueden accederse desde la función o bloque de instrucciones en donde se declaran. Las variables locales se contraponen a las variables globales.  En la mayoría de lenguajes de programación las variables locales son variables automáticas almacenadas directamente en la pila de llamadas. Esto significa que cuando una función recursiva se llama a sí misma, las variables locales reciben, en cada instancia de la función, espacio para el direccionamiento de memoria separados. De esta forma las variables con este ámbito se pueden declarar, reescribir y leer sin riesgo de efectos secundarios para los procesos fuera del bloque en el que son declarados. Algunos expertos abogan por limitarse al uso de variables locales para evitar efectos laterales en el resto del software motivados por un cambio en un módulo en particular. Estas variables sólo pueden accederse desde la función o bloque de instrucciones en donde se declaran, cuyo ámbito se restringe a la función que la ha declarado se dice entonces que la variable es local a esa función. Esto implica que esa variable sólo va a poder ser manipulada en dicha sección, y no se podrá hacer referencia fuera de dicha sección. Cualquier variable que se defina dentro de las llaves del cuerpo de una función se interpreta como una variable local a esa función. Las variables locales estáticas son un tipo especial de variable local disponible en muchos de los lenguajes de programación más usados, entre otros C/C++, Visual Basic y VB.NET y que permite conservar el valor de la variable hasta la próxima llamada de la función. En este caso, llamadas recursivas a la función también tienen acceso a la variable. Dim num1 As Integer Dim num2 As Integer num1 = 10 num2 = 20 Variables Globales: aquella que se define fuera del cuerpo de cualquier función, normalmente al principio del programa, después de la definición de los archivos de biblioteca (#include), de la definición de constantes simbólicas y antes de cualquier función. El ámbito de una variable global son todas las funciones que componen el programa, cualquier función puede acceder a dichas variables para leer y escribir en ellas. Es decir, se puede hacer referencia a su dirección de memoria en cualquier parde del programa. Una variable global es, en informática, una variable accesible en todos los ámbitos de un programa informático. Los mecanismos de interacción con variables globales se denominan mecanismos de entorno global. El concepto de entorno global contrasta con el de entorno local donde todas las variables son locales sin memoria compartida (y por ello todas las iteraciones pueden restringirse al intercambio de mensajes) .

Variable Local

Embed Size (px)

Citation preview

5/15/2018 Variable Local - slidepdf.com

http://slidepdf.com/reader/full/variable-local 1/5

¿Qué es una variable local? 

La variable local es, en informática, la variable a la que se le otorga un ámbito local. Tales

variables sólo pueden accederse desde la función o bloque de instrucciones en donde se

declaran. Las variables locales se contraponen a las variables globales. 

En la mayoría de lenguajes de programación las variables locales son variables

automáticas almacenadas directamente en la pila de llamadas. Esto significa que cuando

una función recursiva se llama a sí misma, las variables locales reciben, en cada

instancia de la función, espacio para el direccionamiento de memoria separados. De esta

forma las variables con este ámbito se pueden declarar, reescribir y leer sin riesgo de

efectos secundarios para los procesos fuera del bloque en el que son declarados.

Algunos expertos abogan por limitarse al uso de variables locales para evitar efectos

laterales en el resto del software motivados por un cambio en un módulo en particular.

Estas variables sólo pueden accederse desde la función o bloque de instrucciones en donde se

declaran, cuyo ámbito se restringe a la función que la ha declarado se dice entonces que la

variable es local a esa función. Esto implica que esa variable sólo va a poder ser manipulada en

dicha sección, y no se podrá hacer referencia fuera de dicha sección. Cualquier variable que se

defina dentro de las llaves del cuerpo de una función se interpreta como una variable local a esa

función.

Las variables locales estáticas son un tipo especial de variable local disponible en muchos de los

lenguajes de programación más usados, entre otros C/C++, Visual Basic y VB.NET y que

permite conservar el valor de la variable hasta la próxima llamada de la función. En este caso,llamadas recursivas a la función también tienen acceso a la variable.

Dim num1 As Integer

Dim num2 As Integer

num1 = 10

num2 = 20 

Variables Globales: 

aquella que se define fuera del cuerpo de cualquier función, normalmente al principiodel programa, después de la definición de los archivos de biblioteca (#include), de la

definición de constantes simbólicas y antes de cualquier función. El ámbito de una

variable global son todas las funciones que componen el programa, cualquier función

puede acceder a dichas variables para leer y escribir en ellas. Es decir, se puede hacer

referencia a su dirección de memoria en cualquier parde del programa.

Una variable global es, en informática, una variable accesible en todos los ámbitos de

un programa informático. Los mecanismos de interacción con variables globales se

denominan mecanismos de entorno global. El concepto de entorno global contrasta con

el de entorno local donde todas las variables son locales sin memoria compartida (y por

ello todas las iteraciones pueden restringirse al intercambio de mensajes).

5/15/2018 Variable Local - slidepdf.com

http://slidepdf.com/reader/full/variable-local 2/5

El uso de este tipo de variables suele considerarse como una mala práctica, por el riesgo

que conlleva esa deslocalización: una variable global puede ser modificada en cualquier

parte del programa (a menos que resida en una sección de memoria protegida) y

cualquier parte del programa depende de ella. Es por ello que una variable global tiene

un potencial ilimitado para crear dependencias, factor éste que aumenta la complejidad.

Sin embargo, en algunas ocasiones, las variables globales resultan muy útiles. Porejemplo, se pueden usar para evitar tener que pasar variables usadas muy

frecuentemente de forma continua entre diferentes subrutinas. 

El uso de variables globales se desaconseja especialmente para lenguajes de

programación funcionales (como puede ser Scheme). Viola la transparencia referencial

y dificulta la legibilidad del código fuente. 

Las variables globales se usan de forma frecuente para pasar información entre

diferentes secciones del código que no comparten una relación de "función llamadora" -

"función llamada", como ocurre con hilos concurrentes y módulos para el manejo de

señales. Los lenguajes de programación donde cada archivo define un espacio denombres implícito elminan la mayor parte de los problemas de los lenguajes con

nombres de espacios gloables, aunque pueda haber algunos problemas si no se tiene

cuidado a la hora de encapsular el código. Sin las restricciones adecuadas (como por

ejemplo con un mutex), el código que usa variables globales no será a prueba de hilos

excepto para los valores de sólo lectura en la memoria protegida. 

Option Explicit

Global sVar1 As String

En el Form_Load:

sVar1= "en Form_Load"'Mostramos el contenido de sVar1MsgBox "El contenido de sVar1 es: " & sVar1

5/15/2018 Variable Local - slidepdf.com

http://slidepdf.com/reader/full/variable-local 3/5

PARAMETROS POR VALOR Y POR REFERENCIA

Pasar parámetros por valor y por referencia (ByVal y ByRef)

Los parámetros en las funciones y procedimientos, se pueden enviar de dos maneras:

por Valor y por Referencia.

Si están declarados como (ByVal), los mismos serán por valor, si se declaran como

(ByRef) serán por referencia.

La diferencia entre uno y otro método de paso de parámetros, es que en (ByVal) se

envía una copia de la variable, y de esta manera si se efectúa un cambio en el

procedimiento, solo tendrá efecto dentro del procedimiento o función, una vez que

termine y finalice el mismo, la variable original pasará a valer el dato que tenía, es decir

no se modifica

En los parámetros enviados por Referencia, lo que se hace es enviar un puntero de la

variable original. Entonces, si en la función o procedimiento se cambia el valor de la

variable, el cambio seguirá manteniéndose una vez que finalice la ejecución del

procedimiento o función.

Ejemplo de envío de parámetros por Valor (ByVal) 

Código de ejemplo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía la variable por Valor ( ByVal )Call Sumar(Un_Valor)'Muestra el valor que es 100, ( no se modificó en la función Sumar )MsgBox Un_Valor

End SubSub Sumar(ByVal Valor As Long)'Modifica la variableValor = Valor + 100End Sub

En el ejemplo anterior hay una Sub llamada Sumar que recibe como parámetro una

variable enviada por valor con ByVal ( es decir es una copia de la variable original ). al

presionar el Commmand1.

Al entrar en la Sub Sumar, el dato se modifica ( Valor = Valor + 100). Cuando finaliza

el procedimiento Sumar y retorna a la línea siguiente de la llamada a la Sub sumar,

muestra mediante un MsgBox el valor de la misma, en este caso es 100, y NO 200 que

es el cambio que tuvo dentro del procedimiento Sumar ( Valor = Valor + 100 ).

5/15/2018 Variable Local - slidepdf.com

http://slidepdf.com/reader/full/variable-local 4/5

Con esto queda visto que en realidad al enviarla como ByVal, se envía una copia de la

variable original y cualquier cambio que se produzca, será solo en el ámbito del

procedimiento o función

Ejemplo de envío de parámetros por Referencia ( ByRef )

Este ejemplo es igual que el anterior, pero en la Sub sumar , la variable Valor se declara

con ByRef ( por Referencia )

Private Sub Command1_Click()Dim Un_Valor As LongUn_Valor = 100'Se envía la variable por Referencia ( ByRef ) con el valor 100Call Sumar(Un_Valor)'Muestra el valor que ahora es 200, ( ya que se modificó en la SubSumar)MsgBox Un_Valor

End SubSub Sumar(ByRef Valor As Long)'Modifica la variableValor = Valor + 100End Sub

Al probar el código, ahora el Msgox al mostrar el valor de la variable, es de 200, y NO

de 100 como en el ejemplo de ByVal.

Esto demuestra que al enviar la variable como referencia, si la misma se modifica

dentro del procedimiento o función, se está modificando la variable REAL, es decir

cualquier cambio que se le haga a la misma, se mantendrá, ya que se está modificando

la variable Real ( no es una copia )

Nota Importante: cuando no se indica a un parámetro de una función o Rutina ni

ByVal, ni ByRef, se asume que la misma se está enviando como referencia (ByRef).

PARÁMETROS OPCIONALES

Un parámetro de un procedimiento puede ser opcional si así se especifica y no es

necesario proporcionarle argumentos al llamar al procedimiento. Los parámetros

opcionales se indican mediante la palabra clave Optional en la definición del

procedimiento. Se aplican las siguientes reglas:

  Todos los parámetros opcionales de la definición del procedimiento deben

especificar un valor predeterminado.

  El valor predeterminado de un parámetro opcional debe ser una expresión

constante.

  Todos los parámetros que vayan a continuación de un parámetro opcional en la

definición del procedimiento también deben ser opcionales.

La siguiente sintaxis muestra una declaración de procedimiento con un parámetro

opcional:

Sub sub name(ByVal parameter 1 As data type 1, Optional ByValparameter 2 As data type 2 = default value)

5/15/2018 Variable Local - slidepdf.com

http://slidepdf.com/reader/full/variable-local 5/5

 

Llamar a procedimientos con parámetros opcionales 

Cuando se llama a un procedimiento con un parámetro opcional, se puede elegir si se

proporciona o no el argumento. Si no se proporciona, el procedimiento utiliza el valor

predeterminado declarado para dicho parámetro.

Si se omiten uno o más argumentos opcionales de la lista de argumentos, hay que

utilizar comas sucesivas para delimitar sus posiciones. En el ejemplo de llamada

siguiente se suministran los argumentos primero y cuarto, pero no el segundo ni el

tercero:

Call sub name(argument 1, , , argument 4)

Determinar si un argumento opcional está presente 

En tiempo de ejecución un procedimiento no puede detectar si un argumento

determinado se ha omitido o si el código de llamada ha suministrado de forma explícitael valor predeterminado de dicho argumento. Si fuese necesario hacer esta distinción, se

podría establecer como valor predeterminado un valor improbable. El siguiente

procedimiento define el parámetro opcional office y comprueba si su valor

predeterminado, QJZ, ha sido omitido en la llamada:

Sub notify(ByVal company As String, Optional ByVal office As String ="QJZ")

If office = "QJZ" ThenDebug.WriteLine("office not supplied -- using Headquarters")office = "Headquarters"

End If

' Insert code to notify headquarters or specified office.End Sub

Si el parámetro opcional es un tipo de referencia, como String, puede utilizar Nothing

como valor predeterminado, siempre y cuando éste no sea un valor esperado para el

argumento.

Parámetros opcionales y sobrecarga

Otra forma de definir un procedimiento con parámetros opcionales consiste en utilizar

una sobrecarga. Si tiene un parámetro opcional, puede definir dos versionessobrecargadas del procedimiento, una que acepte el parámetro y otra sin él. Este

planteamiento se complica a medida que aumenta el número de parámetros opcionales.

No obstante, tiene la ventaja de que permite saber con total certeza si el programa de

llamada ha suministrado o no cada argumento opcional.