Resumen: Entrega nº38 del curso Aprender a programar en Visual Basic desde cero.
Codificación aprenderaprogramar.com: CU00339A
VARIABLES LOCALES, DE CLASE Y GLOBALES EN VISUAL BASIC.
Ya hemos dicho que existen distintas formas de declarar variables con Visual Basic, aunque hayamos venido utilizando principalmente una: la instrucción Dim. Vamos a ver ahora el concepto de variable local, de clase y global trasladado a este lenguaje.
En primer lugar, usaremos el término ámbito para referirnos a aquel conjunto de partes del programa en el que una variable es conocida. Así distinguiremos:
· Variables con ámbito un procedimiento (Sub).
Son declaradas dentro del procedimiento y sólo son conocidas dentro de él. Son declaradas al principio del procedimiento (cabecera del procedimiento) o en un punto intermedio del mismo. No puede invocarse la variable sin que antes se haya declarado. En general, para una mejor ordenación del programa siempre será preferible que las declaraciones sean en cabecera. Podemos llamarlas variables locales al procedimiento.
· Variables con ámbito el módulo o la clase de formulario.
Son declaradas en la cabecera del código asociado al formulario y no están dentro de un procedimiento o función (Sub) concreto. Podemos llamarlas variables locales al módulo de formulario ó en las versiones más recientes de Visual Basic la denominación es “variables de clase” o “atributos de la clase”, ya que en las versiones más recientes de Visual Basic decimos que el código se organiza en “clases”. Estas variables son conocidas por todos los procedimientos existentes en el código asociado al formulario.
· Variables con ámbito todos los módulos o todas las clases del programa.
Son declaradas dentro de un módulo estándar usando la declaración Public.
Prueba el siguiente código:
Código (versiones VB menos recientes) | Código (versiones VB más recientes) |
'Curso VB aprenderaprogramar.com Option Explicit Private Sub Form_Load() Positiv End Sub Private Sub Form_Click() Positiv End Sub Private Sub Positiv() Dim Valor As Integer Dim Número As Single Número = InputBox("Por favor, introduzca un número", "Número") Valor = Abs(CInt(Número)) Label1 = "El valor absoluto entero más próximo es " & Valor End Sub |
REM Curso Visual Basic aprenderaprogramar.com Option Explicit On Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Positiv() End Sub Private Sub Form1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Positiv() End Sub Private Sub Positiv() Dim Valor As Integer Dim Número As Single Número = InputBox("Por favor, introduzca un número", "Número") Valor = Math.Abs(CInt(Número)) Label1.Text = "El valor absoluto entero más próximo es " & Valor End Sub End Class |
Las variables Valor y Número son variables locales al procedimiento Positiv, resultando no conocidas en el resto del programa.
EJERCICIO
Transformar en código el siguiente pseudocódigo referente a un programa denominado SUC01. El cometido del programa es calcular la suma de los términos de la sucesión:
PROGRAMA SUC 01 Curso Visual Basic aprenderaprogramar.com Variables Reales: a, Suma 1. Inicio 2. Llamar EntraDatos 3. Llamar Calculo 4. Mostrar “El valor del sumatorio es”, Suma 5. Fin Módulo EntraDatos 1. Mientras a <= 0 ó a > 100 Hacer 1.1 Mostrar “Por favor introduzca un número entero comprendido entre 1 y 100” 1.2 Pedir a 1.3 a = Redondear(a) Repetir 2. Mostrar “El dato base es”, a FinMódulo Módulo Calculo Variables Enteras: i 1. Hacer 1.1 Suma = Suma + 1 / a 1.2 a = a – 1 1.3 i = i + 1 Repetir Mientras a <> 0 2. Mostrar “Contabilizados”, i, “términos” FinMódulo |
SOLUCIÓN
Código (versiones VB menos recientes) | Código (versiones VB más recientes) |
'Curso VB aprenderaprogramar.com Option Explicit '[Programa SUC01] Dim a!, Suma As Single Private Sub Form_Load() EntraDatos Cálculo Label2 = "El valor del sumatorio es " & Suma End Sub Private Sub EntraDatos() Do While a <= 0 Or a > 100 a = InputBox("Introduzca un entero comprendido entre 1 y 100", "Entero") a = CInt(a) Loop Label1 = "El dato base es " & a End Sub Private Sub Cálculo() Dim i As Integer Do Suma = Suma + 1 / a a = a - 1 i = i + 1 Loop While a <> 0 Label1 = Label1 & vbCrLf & vbCrLf & "Contabilizados " & i & " términos" End Sub |
REM Curso Visual Basic aprenderaprogramar.com Option Explicit On '[Programa SUC01] Public Class Form1 Dim a, Suma As Single Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load EntraDatos() Cálculo() Label2.Text = "El valor del sumatorio es " & Suma End Sub Private Sub EntraDatos() Do While a <= 0 Or a > 100 a = InputBox("Introduzca un entero comprendido entre 1 y 100", "Entero") a = CInt(a) Loop Label1.Text = "El dato base es " & a End Sub Private Sub Cálculo() Dim i As Integer Do Suma = Suma + 1 / a a = a - 1 i = i + 1 Loop While a <> 0 Label1.Text = Label1.Text & vbCrLf & vbCrLf & "Contabilizados " & i & " términos" End Sub End Class |
El programa trabaja con tres variables: a, Suma y i. Las variables a y Suma son de tipo Single, y por estar declaradas en la cabecera del módulo de formulario son conocidas en todos los procedimientos. La variable i es de tipo Integer y por estar declarada en la cabecera de un procedimiento es una variable local de dicho procedimiento. Si pruebas a escribir esta modificación: Label2 = "El valor del sumatorio es" & Suma & "con" & i & "términos", comprobarás que te sale en pantalla el mensaje: "Error de compilación: Variable no definida." En realidad la variable i sí está definida, pero tiene un ámbito restringido y no podemos usarla en el sitio donde hemos tratado de hacerlo.
Si ejecutas el programa se deben obtener resultados como:
a = 1 . El valor del sumatorio es 1. a = 2. El valor del sumatorio es 1,5.
a = 3. El valor del sumatorio es 1,8333. a = 5. El valor del sumatorio es 2,2833.
a = 10. El valor del sumatorio es 2,9289. a = 50. El valor del sumatorio es 4,4992.