Upload
eyber-gutierrez
View
59
Download
0
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.