NekroAyuda: Introducción a las Variables, Constantes y Tipos de Datos.

(1/3) > >>

NekroByte:
Citar

Extraido de las Librerías de Microsoft Developer NetWork.


Introducción a las Variables, Constantes y Tipos de Datos


A menudo necesitará almacenar valores temporalmente cuando esté realizando cálculos con Visual Basic. Por ejemplo, puede que desee calcular diversos valores, compararlos y realizar distintas operaciones con ellos, dependiendo de los resultados de la comparación. Necesitará conservar los valores si desea compararlos, pero no necesitará almacenarlos en una propiedad.

Visual Basic, como la mayoría de los lenguajes de programación, utiliza variables para almacenar valores. Las variables tienen un nombre (la palabra que utiliza para referirse al valor que contiene la variable) y un tipo de dato (que determina la clase de datos que puede almacenar la variable). Se pueden usar matrices para almacenar colecciones indexadas de variables relacionadas.

Las constantes también almacenan valores pero, como su nombre indica, estos valores permanecen constantes durante la ejecución de la aplicación. La utilización de constantes puede hacer más legible el código ya que proporciona nombres significativos en vez de números. Visual Basic incorpora una serie de constantes, pero puede crear sus propias constantes.

Los tipos de datos controlan el almacenamiento interno de datos en Visual Basic. De forma predeterminada, Visual Basic utiliza el tipo de dato Variant. Hay otros tipos de datos disponibles que le permiten optimizar el código en cuanto a velocidad y tamaño cuando no necesite la flexibilidad que proporciona el tipo Variant.

Para obtener información más detallada, vea:
Variables   Introducción a las variables: qué son y cómo usarlas.Descripción del alcance de las variables   Análisis de cómo se aplica el alcance a las variables.Temas avanzados sobre variables   Información detallada sobre las variables.Variables estáticas   Introducción a la utilización de variables estáticas para preservar valores.Constantes   Introducción a la utilización de constantes para representar valores.Tipos de datos   Análisis de los tipos de datos disponibles en Visual Basic.Temas avanzados sobre el tipo de dato Variant   Información detallada sobre el tipo de dato Variant.Matrices   Introducción a la utilización de matrices para grupos de valores.Matrices dinámicas   Análisis sobre la utilización de matrices dinámicas para trabajar con grupos de valores

NekroByte:
Variables


En Visual Basic puede usar variables para almacenar valores temporalmente durante la ejecución de una aplicación. Las variables tienen un nombre (la palabra que utiliza para referirse al valor que contiene la variable) y un tipo de dato (que determina la clase de datos que la variable puede almacenar).

Puede considerar una variable como un marcador de posición en memoria de un valor desconocido. Por ejemplo, suponga que está creando un programa para una frutería que haga un seguimiento del precio de las manzanas. No sabe el precio de una manzana o la cantidad que se ha vendido hasta que no se produce realmente la venta. Puede usar dos variables para almacenar los valores desconocidos (vamos a llamarlos PrecioManzanas y ManzanasVendidas). Cada vez que se ejecuta el programa, el usuario especifica los valores de las dos variables. Para calcular las ventas totales y mostrarlas en un cuadro de texto llamado txtVentas, el código debería parecerse al siguiente:

Código:

txtVentas.txt = PrecioManzanas * ManzanasVendidas


La expresión devuelve un total distinto cada vez, dependiendo de los valores que indique el usuario. Las variables le permiten realizar un cálculo sin tener que saber antes cuáles son los valores especificados.

En este ejemplo, el tipo de dato de PrecioManzanas es Currency; el tipo de dato de ManzanasVendidas es Integer. Las variables pueden representar otros muchos valores como valores de texto, fechas, diversos tipos numéricos e incluso objetos.


Almacenar y recuperar datos en variables

Utilice instrucciones de asignación para realizar cálculos y asignar el resultado a una variable:

Código:

ManzanasVendidas = 10                  ' Se pasa el valor 10 a
                                    ' la variable.
ManzanasVendidas = ManzanasVendidas + 1   ' Se incrementa la variable.


Observe que el signo igual del ejemplo es un operador de asignación, no un operador de igualdad; el valor (10) se asigna a la variable (ManzanasVendidas).


Declarar variables

Declarar una variable es decirle al programa algo de antemano. Se declara una variable mediante la instrucción Dim, proporcionando un nombre a la variable:

Dim nombreVariable [As tipo]

Las variables que se declaran en un procedimiento mediante la instrucción Dim sólo existen mientras se ejecuta el procedimiento. Cuando termina el procedimiento, desaparece el valor de la variable. Además, el valor de una variable de un procedimiento es local de dicho procedimiento; es decir, no puede tener acceso a una variable de un procedimiento desde otro procedimiento. Estas características le permiten usar los mismos nombres de variables en distintos procedimientos sin preocuparse por posibles conflictos o modificaciones accidentales.

El nombre de una variable:
Debe comenzar con una letra.No puede incluir un punto o un carácter de declaración de tipo.No debe exceder de 255 caracteres.Debe ser única en el mismo alcance, que es el intervalo desde el que se puede hacer referencia a la variable: un procedimiento, formulario, etc.
La cláusula opcional As tipo de la instrucción Dim le permite definir el tipo de dato o de objeto de la variable que va a declarar. Los tipos de datos definen el tipo de información que almacena la variable. Algunos ejemplos de tipos de datos son String, Integer y Currency. Las variables también pueden contener objetos de Visual Basic u otras aplicaciones. Algunos ejemplos de tipos de objeto de Visual Basic, o clases, son Object, Form1 y TextBox.


Hay otras formas de declarar variables:
Declarar una variable en la sección Declaraciones de un módulo de formulario, estándar o de clase, en vez de en un procedimiento, hace que la variable esté disponible para todos los procedimientos del módulo.Declarar una variable mediante la palabra clave Public hace que esté accesible para toda la aplicación.Declarar una variable local mediante la palabra clave Static preserva su valor aunque termine el procedimiento.

Declaración implícita

No tiene por qué declarar una variable antes de usarla. Por ejemplo, podría escribir una función donde no hiciera falta declarar TempVal antes de usarla:

Código:

Function SafeSqr(num)
   TempVal = Abs(num)
   SafeSqr = Sqr(TempVal)
End Function


Visual Basic crea automáticamente una variable con ese nombre, que puede usar como si la hubiera declarado explícitamente. Aunque es cómodo, puede provocar errores sutiles en el código si se equivoca de nombre de variable. Por ejemplo, suponga que ha escrito esta función:

Código:

Function SafeSqr(num)
   TempVal = Abs(num)
   SafeSqr = Sqr(TemVal)
End Function


A primera vista, parece igual. Pero como se ha escrito erróneamente la variable TempVal en la tercera línea, la función devolverá siempre cero. Cuando Visual Basic encuentra un nombre nuevo, no puede averiguar si realmente desea declarar una variable nueva o simplemente ha escrito de forma errónea una variable existente, por lo que crea una variable nueva con ese nombre.


Declaración explícita

Para evitar problemas al equivocarse de nombre en las variables, puede estipular que Visual Basic le avise siempre que encuentre un nombre que no se haya declarado explícitamente como una variable.

Para declarar variables de forma explícita
Incluya esta instrucción en la sección Declaraciones del módulo de clase, de formulario o estándar:Código:

Option Explicit

[li]–o bien–
En el menú Herramientas, elija Opciones, haga clic en la ficha Editor y active la opción Requerir declaración de variables. Esto inserta automáticamente la instrucción Option Explicit en los módulos nuevos, pero no en los ya creados, por lo que tendrá que agregar manualmente Option Explicit a los módulos existentes en el proyecto.[/li]
[/list]

Si hubiera tenido efecto dicha instrucción en el módulo de formulario o estándar que contiene la función SafeSqr, Visual Basic habría reconocido TempVal y TemVal como variables no declaradas y habría generado errores para ambas. Debería, por tanto, declarar explícitamente TempVal:

Código:

Function SafeSqr(num)
   Dim TempVal
   TempVal = Abs(num)
   SafeSqr = Sqr(TemVal)
End Function


Ahora podrá comprender el problema inmediatamente porque Visual Basic habrá mostrado un mensaje de error para la variable TemVal que se ha escrito de forma incorrecta. Como la instrucción Option Explicit le ayuda a interceptar esta clase de errores, es conveniente usarla en todo el código.

Nota: La instrucción Option Explicit funciona sobre módulo a módulo; debe colocarse en la sección Declaraciones de todos los módulos de formulario, estándar o de clase en los que desee que Visual Basic obligue a declarar explícitamente las variables. Si activa Requerir declaración de variables, Visual Basic insertará Option Explicit en todos los módulos de formulario, estándares o de clase siguientes, pero no lo agregará en el código existente. Deberá agregar manualmente Option Explicit a los módulos ya existentes en el proyecto.

NekroByte:
Descripción del alcance de las variables


El alcance de una variable define qué partes del código son conscientes de su existencia. Cuando declara una variable en un procedimiento, sólo el código de dicho procedimiento puede tener acceso o modificar el valor de la variable; tiene un alcance que es local al procedimiento. A veces, sin embargo, se necesita usar una variable con un alcance más general, como aquella cuyo valor está disponible para todos los procedimientos del mismo módulo o incluso para todos los procedimientos de toda la aplicación. Visual Basic le permite especificar el alcance de una variable cuando la declara.


Establecer el alcance de las variables

Dependiendo de cómo se declara, una variable tiene como alcance un procedimiento (local) o un módulo.

Alcance ---> Nivel de Procedimiento ---> Nivel de Módulo

Privado ---> Las variables son privadas del procedimiento en el que aparecen. ---> Las variables son privadas del módulo en el que aparecen.

Público ---> No puede declarar variables públicas dentro de un procedimiento. ---> Variables utilizadas en un procedimiento.



Variables utilizadas en un procedimiento.

Las variables a nivel de procedimiento sólo se reconocen en el procedimiento en el que se han declarado. Se las conoce también como variables locales. Se declaran mediante las palabras clave Dim o Static. Por ejemplo:

Código:

Dim intTemp As Integer

–o bien–

Código:

Static intPermanent As Integer

Los valores de variables locales declaradas con Static existen mientras se ejecuta la aplicación, mientras que las variables declaradas con Dim sólo existen mientras se ejecuta el procedimiento.

Las variables locales resultan una elección apropiada para cálculos temporales. Por ejemplo, puede crear una docena de procedimientos distintos que contengan una variable llamada intTemp. Como cada intTemp se ha declarado como una variable local, cada procedimiento sólo reconoce su propia versión de intTemp. Cualquier procedimiento puede alterar el valor de su intTemp local sin que ello afecte a las variables intTemp de los demás procedimientos.


Variables utilizadas en un módulo

De forma predeterminada, una variable a nivel de módulo está disponible para todos los procedimientos del módulo, pero no para el código de otros módulos. Cree variables a nivel de módulo declarándolas con la palabra clave Private en la sección Declaraciones al principio del módulo. Por ejemplo:

Código:

Private intTemp As Integer


A nivel de módulo, no hay diferencia entre Private y Dim, pero es preferible Private porque contrasta con Public y hace que el código sea más fácil de comprender.


Variables utilizadas por todos los módulos

Para hacer que una variable a nivel de módulo esté disponible para otros módulos, utilice la palabra clave Public para declarar la variable. Los valores de las variables públicas están disponibles para todos los procedimientos de la aplicación. Al igual que todas las variables a nivel de módulo, las variables públicas se declaran en la sección Declaraciones al principio del módulo. Por ejemplo:

Código:

Public intTemp As Integer


Nota: No puede declarar variables públicas en un procedimiento, sólo en la sección Declaraciones de un módulo.

NekroByte:
Temas avanzados sobre variables


Usar diversas variables con el mismo nombre

Si hay variables públicas en módulos distintos que comparten el mismo nombre, es posible diferenciarlas en el código haciendo referencia al módulo y a los nombres de variable. Por ejemplo, si hay una variable pública de tipo Integer, intX , declarada en Form1 y en Module1, puede hacer referencia a ambas como Module1.intX y Form1.intX para obtener los valores correctos.

Para ver cómo funciona, inserte dos módulos estándar en un proyecto nuevo y dibuje tres botones de comando en un formulario.

Se declara una variable, intX, en el primer módulo estándar, Module1. El procedimiento Test establece su valor:

Código:

Public intX As Integer      ' Declara intX en Module1.
Sub Test()
   ' Establece el valor de la variable intX en Module1.
   intX = 1   
End Sub


La segunda variable, que tiene el mismo nombre intX, se declara en el segundo módulo estándar, Module2. De nuevo, un procedimiento llamado Test establece su valor:

Código:

Public intX As Integer      ' Declara intX en Module2.
Sub Test()
   ' Establece el valor de la variable intX en Module2
   intX = 2   
End Sub


La tercera variable intX se declara en el módulo de formulario. Una vez más, un procedimiento llamado Test establece su valor.

Código:

Public intX As Integer      ' Declara la variable intX del
                           ' formulario.
Sub Test()
   ' Establece el valor de la variable intX del formulario.
   intX = 3
End Sub


Cada uno de los procedimientos de evento Click de los tres botones de comando llama al procedimiento Test adecuado y utiliza MsgBox para mostrar los valores de las tres variables.

Código:

Private Sub Command1_Click()
   Module1.Test               ' Llama a Test en Module1.
   MsgBox Module1.intX         ' Muestra intX de Module1.
End Sub

Private Sub Command2_Click()
   Module2.Test               ' Llama a Test en Module2.
   MsgBox Module2.intX         ' Muestra intX de Module2.
End Sub

Private Sub Command3_Click()
   Test                     ' Llama a Test en Form1.
   MsgBox intX               ' Muestra intX de Form1.
End Sub


Ejecute la aplicación y haga clic en cada uno de los tres botones de comando. Verá las distintas referencias a las tres variables públicas. Observe que en el procedimiento de evento Click del tercer botón de comando no necesita especificar Form1.Test cuando llame al procedimiento Test del formulario ni a Form1.intX cuando llame al valor de la variable Integer del formulario. Si hay varios procedimientos y variables con el mismo nombre, Visual Basic toma el valor de la variable más local que, en este caso, es la variable de Form1.


Variables públicas frente a locales

También puede tener una variable con el mismo nombre en alcances distintos. Por ejemplo, podría tener una variable pública llamada Temp y, en un procedimiento, declarar una variable local llamada Temp. Las referencias al nombre Temp dentro del procedimiento tendrían acceso a la variable local y las referencias a Temp fuera del procedimiento tendrían acceso a la variable pública. Se puede tener acceso a la variable a nivel de módulo desde el procedimiento calificándola con el nombre del módulo.

Código:

Public Temp As Integer
Sub Test()
   Dim Temp As Integer
   Temp = 2               ' Temp tiene el valor 2.
   MsgBox Form1.Temp      ' Form1.Temp tiene el valor 1.
End Sub

Private Sub Form_Load()
   Temp = 1               ' Establece Form1.Temp a 1.
End Sub
Private Sub Command1_Click()
   Test   
End Sub


En general, cuando las variables tienen el mismo nombre pero distinto alcance, la variable más local siempre oculta (es decir, tiene preferencia de acceso) a las variables menos locales. Así, si tiene también una variable a nivel de procedimiento llamada Temp, ensombrecería a la variable pública Temp de ese módulo.


Ensombrecer propiedades de formularios y controles

Debido al efecto de ensombrecimiento, las propiedades de formularios, controles, constantes y procedimientos se tratan como variables a nivel de módulo en el módulo de formulario. No es legal tener una propiedad de formulario o un control con el mismo nombre que una variable a nivel de módulo, constante, tipo definido por el usuario o procedimiento, ya que ambas tendrían el mismo alcance.

En el módulo de formulario, las variables locales con nombres iguales a controles del formulario ensombrecen a los controles. Debe calificar el control con una referencia al formulario o usar la palabra clave Me para establecer u obtener su valor o cualquiera de sus propiedades. Por ejemplo:

Código:

Private Sub Form_Click ()
Dim Text1, BackColor
' Se supone que también hay un control en el formulario que se
' llama Text1.
   Text1 = "Variable"   ' La variable ensombrece al control.
   Me.Text1 = "Control"   ' Debe calificar con Me para obtener
                        ' el control.
   Text1.Top = 0         ' Esto provoca un error
   Me.Text1.Top = 0      ' Debe calificar con Me para obtener
                        ' el control.
   BackColor = 0         ' La variable ensombrece a la propiedad.
   Me.BackColor = 0      ' Debe calificar con Me para obtener la
                        ' propiedad del formulario.
End Sub



Usar variables y procedimientos con el mismo nombre

Los nombres de las variables privadas y públicas a nivel de módulo también pueden entrar en conflicto con los nombres de los procedimientos. Una variable del módulo no puede tener el mismo nombre que los procedimientos o tipos definidos en el módulo. Sin embargo, pueden tener el mismo nombre que los procedimientos, tipos o variables públicos definidos en otros módulos. En este caso, cuando se tiene acceso a la variable desde otro módulo, debe calificarse con el nombre del módulo.

Aunque las reglas de ensombrecimiento descritas antes no son complejas, el ensombrecimiento puede confundir y conducir a errores sutiles en el código; en programación es conveniente asignar nombres distintos a las variables. En los módulos de formulario, procure usar nombres de variable que difieran de los nombres de los controles utilizados en esos formularios.

NekroByte:
Variables estáticas




Usar diversas variables con el mismo nombre

Si hay variables públicas en módulos distintos que comparten el mismo nombre, es posible diferenciarlas en el código haciendo referencia al módulo y a los nombres de variable. Por ejemplo, si hay una variable pública de tipo Integer, intX , declarada en Form1 y en Module1, puede hacer referencia a ambas como Module1.intX y Form1.intX para obtener los valores correctos.

Para ver cómo funciona, inserte dos módulos estándar en un proyecto nuevo y dibuje tres botones de comando en un formulario.

Se declara una variable, intX, en el primer módulo estándar, Module1. El procedimiento Test establece su valor:

Código:

Public intX As Integer      ' Declara intX en Module1.
Sub Test()
   ' Establece el valor de la variable intX en Module1.
   intX = 1   
End Sub


La segunda variable, que tiene el mismo nombre intX, se declara en el segundo módulo estándar, Module2. De nuevo, un procedimiento llamado Test establece su valor:

Código:

Public intX As Integer      ' Declara intX en Module2.
Sub Test()
   ' Establece el valor de la variable intX en Module2
   intX = 2   
End Sub


La tercera variable intX se declara en el módulo de formulario. Una vez más, un procedimiento llamado Test establece su valor.

Código:

Public intX As Integer      ' Declara la variable intX del
                           ' formulario.
Sub Test()
   ' Establece el valor de la variable intX del formulario.
   intX = 3
End Sub


Cada uno de los procedimientos de evento Click de los tres botones de comando llama al procedimiento Test adecuado y utiliza MsgBox para mostrar los valores de las tres variables.

Código:

Private Sub Command1_Click()
   Module1.Test               ' Llama a Test en Module1.
   MsgBox Module1.intX         ' Muestra intX de Module1.
End Sub

Private Sub Command2_Click()
   Module2.Test               ' Llama a Test en Module2.
   MsgBox Module2.intX         ' Muestra intX de Module2.
End Sub

Private Sub Command3_Click()
   Test                     ' Llama a Test en Form1.
   MsgBox intX               ' Muestra intX de Form1.
End Sub


Ejecute la aplicación y haga clic en cada uno de los tres botones de comando. Verá las distintas referencias a las tres variables públicas. Observe que en el procedimiento de evento Click del tercer botón de comando no necesita especificar Form1.Test cuando llame al procedimiento Test del formulario ni a Form1.intX cuando llame al valor de la variable Integer del formulario. Si hay varios procedimientos y variables con el mismo nombre, Visual Basic toma el valor de la variable más local que, en este caso, es la variable de Form1.


Variables públicas frente a locales

También puede tener una variable con el mismo nombre en alcances distintos. Por ejemplo, podría tener una variable pública llamada Temp y, en un procedimiento, declarar una variable local llamada Temp. Las referencias al nombre Temp dentro del procedimiento tendrían acceso a la variable local y las referencias a Temp fuera del procedimiento tendrían acceso a la variable pública. Se puede tener acceso a la variable a nivel de módulo desde el procedimiento calificándola con el nombre del módulo.

Código:

Public Temp As Integer
Sub Test()
   Dim Temp As Integer
   Temp = 2               ' Temp tiene el valor 2.
   MsgBox Form1.Temp      ' Form1.Temp tiene el valor 1.
End Sub

Private Sub Form_Load()
   Temp = 1               ' Establece Form1.Temp a 1.
End Sub
Private Sub Command1_Click()
   Test   
End Sub


En general, cuando las variables tienen el mismo nombre pero distinto alcance, la variable más local siempre oculta (es decir, tiene preferencia de acceso) a las variables menos locales. Así, si tiene también una variable a nivel de procedimiento llamada Temp, ensombrecería a la variable pública Temp de ese módulo.


Ensombrecer propiedades de formularios y controles

Debido al efecto de ensombrecimiento, las propiedades de formularios, controles, constantes y procedimientos se tratan como variables a nivel de módulo en el módulo de formulario. No es legal tener una propiedad de formulario o un control con el mismo nombre que una variable a nivel de módulo, constante, tipo definido por el usuario o procedimiento, ya que ambas tendrían el mismo alcance.

En el módulo de formulario, las variables locales con nombres iguales a controles del formulario ensombrecen a los controles. Debe calificar el control con una referencia al formulario o usar la palabra clave Me para establecer u obtener su valor o cualquiera de sus propiedades. Por ejemplo:

Código:

Private Sub Form_Click ()
Dim Text1, BackColor
' Se supone que también hay un control en el formulario que se
' llama Text1.
   Text1 = "Variable"   ' La variable ensombrece al control.
   Me.Text1 = "Control"   ' Debe calificar con Me para obtener
                        ' el control.
   Text1.Top = 0         ' Esto provoca un error
   Me.Text1.Top = 0      ' Debe calificar con Me para obtener
                        ' el control.
   BackColor = 0         ' La variable ensombrece a la propiedad.
   Me.BackColor = 0      ' Debe calificar con Me para obtener la
                        ' propiedad del formulario.
End Sub



Usar variables y procedimientos con el mismo nombre

Los nombres de las variables privadas y públicas a nivel de módulo también pueden entrar en conflicto con los nombres de los procedimientos. Una variable del módulo no puede tener el mismo nombre que los procedimientos o tipos definidos en el módulo. Sin embargo, pueden tener el mismo nombre que los procedimientos, tipos o variables públicos definidos en otros módulos. En este caso, cuando se tiene acceso a la variable desde otro módulo, debe calificarse con el nombre del módulo.

Aunque las reglas de ensombrecimiento descritas antes no son complejas, el ensombrecimiento puede confundir y conducir a errores sutiles en el código; en programación es conveniente asignar nombres distintos a las variables. En los módulos de formulario, procure usar nombres de variable que difieran de los nombres de los controles utilizados en esos formularios.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente