Anda di halaman 1dari 18

Programación Básica

UNIDAD #05
Modularización:
Procedimientos y Funciones
Modularización:
Procedimientos y Funciones
Bienvenido a la unidad 5 de Programación Básica, al finalizar el estudio de esta
unidad tendrás un conocimiento y adquirirás habilidades de los siguientes temas:

Ø Subrutinas, definición y ventajas de su uso.


Ø Tipos de procedimientos en VB.
Ø Creación y utilización de módulos estándar.
Ø Mecanismos de paso de parámetros.
Ø Diferencias en la utilización de procedimientos y funciones.
Ø Técnicas básicas de Depuración de aplicaciones en VB

5.1. – Introducción:
Como ya vimos en unidades anteriores, cuando necesitamos resolver un
problema, es muy útil -y a veces la única forma de resolverlo-, plantearlo con un enfoque Cuando llamamos a un
procedimiento o
descendente, dividiéndolo en varios problemas más pequeños. Los lenguajes de función, se transfiere el
programación modernos nos brindan la posibilidad de definir procedimientos y control a la primer
funciones (podemos usar el término subrutina para referirnos a ambos en forma sentencia de dicha
genérica). subrutina, se ejecuta
esta completamente y
Las subrutinas son porciones de código que se programan para resolver algún luego se transfiere el
control a la sentencia
problema determinado, por ejemplo podemos tener un procedimiento que se encargue siguiente a aquella en
de realizar la validación de una palabra clave ingresada por el usuario o una función que la que se realizó la
calcule alguna expresión matemática compleja y nos retorne un valor. llamada.

Los procedimientos y funciones que programemos serán llamados y utilizados


de la misma forma que lo hacemos con los procedimientos y funciones ya definidos en
VB.

5.1.1.- Ventajas del uso de subrutinas:


La principal diferencia
Hacer uso de subrutinas tiene las siguientes ventajas: entre los
procedimientos y las
q Permite una mejor organización del código ya que el mismo será dividido según funciones es que las
su objetivo. funciones siempre
retornan un valor.
q Permite ‘reutilizar’ el código: lo escribimos una única vez y lo utilizamos desde Podemos decir que las
varias partes del programa (o inclusive desde diferentes proyectos, mediante el funciones tienen un
uso de módulos). tipo de datos asociado.
Por eso es habitual
q Facilitan la prueba del programa: ya que cada subrutina se puede ejecutar y utilizarlas a la derecha
de sentencias de
evaluar en forma independiente. asignación, algo que
q Tener el código sólo una vez en un procedimiento o función permite que VB no podemos hacer con
los procedimientos.
genere un código más eficiente y optimizado que tener repetido dicho código en
varias partes de la aplicación.

Programación Básica Página 1


5.2. – Procedimientos en VB:
5.2.1. – Tipos de procedimiento:

En VB hay tres clases de procedimientos:

• de Evento
• Generales
• de Propiedad

q Los procedimientos de Evento, (que ya estuvimos utilizando desde la primer


clase de nuestro curso), se invocan en forma automática en respuesta a un
evento disparado por el usuario o por el sistema, o cuando son llamados por
otra sentencia. Los procedimientos de evento se almacenan en un módulo de
formulario y son privados por default.
q Los procedimientos Generales, son bloques de código que necesitan ser
explícitamente llamados desde otros procedimientos. A diferencia de los
procedimientos de eventos los procedimientos generales deben ser creados por
el programador de la aplicación.
q Los procedimientos de Propiedad, pueden retornar y asignar valores, y
establecer referencias a objetos (estos procedimientos están más allá del
alcance de nuestra asignatura).

5.2.1.1. – Procedimientos de Evento:

Cuando un objeto en Visual Basic reconoce que se ha producido un evento,


llama automáticamente al procedimiento de evento utilizando el nombre correspondiente
al evento. Como el nombre establece una asociación entre el objeto y el código, se dice
que los procedimientos de evento están asociados a formularios y controles.

• El nombre de un procedimiento de evento de un control combina el nombre real


del control (especificado en la propiedad Name), un carácter de subrayado (_) y
el nombre del evento. Por ejemplo, si desea que un botón de comando llamado
cmdComando1 llame al procedimiento de evento Click cuando se haga clic en
él, utilice el procedimiento cmdComando1_Click.

• El nombre de un procedimientos de evento de un formulario combina la palabra


"Form", un carácter de subrayado y el nombre del evento. Si desea que un
formulario llame a un procedimiento de evento Click cuando se hace clic en él, Es conveniente
utilice el procedimiento Form_Click. (Como los controles, los formularios tienen establecer la propiedad
Name de los controles
nombres únicos, pero no se utilizan en los nombres de los procedimientos de antes de empezar a
evento.) escribir los
procedimientos de
evento para los
mismos. Si cambia el
5.2.1.2. – Procedimientos Generales: nombre de un control
luego de que le
Los procedimientos generales no necesitan estar asociados a ningún evento en hayamos asociado un
particular, pueden ser llamados desde otros procedimientos y nos facilitan el trabajo de procedimiento, deberá
cambiar también el
dividir aplicaciones complejas en unidades más fácilmente manejables. nombre del
procedimiento para
Un procedimiento general indica a la aplicación cómo realizar una tarea que coincida con el
específica. Una vez que se define un procedimiento general, se le debe llamar nuevo nombre del
control. De lo contrario,
específicamente desde la aplicación. Por el contrario, un procedimiento de evento Visual Basic no será
permanece inactivo hasta que se le llama para responder a eventos provocados por el capaz de hacer
usuario o desencadenados por el sistema. coincidir el control con
el procedimiento.
Cuando el nombre de
En VB hay dos tipos de procedimientos generales: procedimientos ‘sub’ un procedimiento no
(nosotros los denominaremos simplemente procedimientos) y procedimientos ‘function’ coincide con el nombre
(los denominaremos funciones). Los procedimientos generales pueden ser almacenados de un control, se
convierte en un
procedimiento general.

Programación Básica Página 2


en un módulo de formulario o en un módulo standard. Por lo tanto los procedimientos
generales pueden ser utilizados por varios proyectos.

Las funciones se comportan de una forma similar a los procedimientos, con la


diferencia de que siempre retornan un valor. Debemos definir en la cabecera de la
función de que tipo de datos es el valor retornado.

5.2.1.2.1. – Creación de Procedimientos Generales:

Una buena razón para crear procedimientos generales es que muchos


procedimientos de evento distintos pueden necesitar que se lleven a cabo las mismas
acciones. Es una buena estrategia de programación colocar las instrucciones comunes
en un procedimiento distinto (u procedimiento general) y hacer que los procedimientos
de evento lo llamen. Esto elimina la necesidad de duplicar código y también hace que la
aplicación sea más fácil de mantener.

Hay dos formas de crear un procedimiento general dentro de un módulo de


código:
• Mediante la caja de diálogo Agregar Procedimiento (Add Procedure)
• Escribiendo directamente el procedimiento en la Ventana de Edición
de Código.

Usando la caja de diálogo “Agregar Procedimiento”:

Los pasos a seguir son los siguientes:


- Abrimos la Ventana de Edición de código para el módulo en el cual
queremos crear un procedimiento.
- En el menú Tools (Herramientas), hacemos click en “Add Procedure”
(“Agregar Procedimiento”)

Fig.: Caja de Diálogo “Agregar Procedimiento”

- En la caja Nombre (Name), ingresamos el nombre para el procedimiento.


- En el grupo Tipo (Type), elegimos Procedimiento (Sub), para crear un
procedimiento) o Función (Function) para crear una función.
- En el grupo Alcance (Scope), hacemos click en Público (Public), si
queremos que el procedimiento o función sea público y pueda ser invocado
desde cualquier módulo o hacemos click en Privado (Private), si queremos
que el procedimiento pueda únicamente ser invocado desde dentro del
módulo.

Programación Básica Página 3


Luego de seguir este procedimiento VB creará una plantilla de procedimiento
para que nosotros podamos escribir el código dentro de la misma.

Usando la ventana de Edición de Código:

Los pasos a seguir son los siguientes:


- En la ventana de edición de código ubicamos el cursor fuera de cualquier
procedimiento existente.
- Escribimos Sub o Function, seguido por el nombre del procedimiento o
función y luego pulsamos Enter.

Dependiendo de si queremos escribir un procedimiento o una función, debemos


utilizar la sintaxis correspondiente: Los parámetros que
se observan en la
sintaxis, nos permiten
Sintaxis para Procedimientos: definir argumentos que
pueden ser pasados a
Sub NombreProcedimiento (Param1 As Tipo, Param2 As Tipo,...) los procedimientos y
funciones. Para cada
[Código para el procedimiento] argumento debemos
End Sub definir su nombre y tipo
de datos.
Sintaxis para Funciones:

Function NombreFuncion (Param1 As Tipo, Param2 As Tipo,...) As Tipo


[Código para la función]
End Function
Los parámetros de los
procedimientos que
escribamos son de tipo
5.2.1.2.2. – Creación de Módulos Estándar: Variant por default. Sin
embargo, podemos
De la misma forma que cuando declaramos variables dentro de un módulo declarar argumentos del
estándar, por default ellas son públicas, si ubicamos procedimientos generales dentro de tipo de datos que
necesitemos, y es
un módulo, los mismos serán públicos por default. Los procedimientos y funciones recomendable que
públicos dentro de un módulo estándar pueden ser llamados desde procedimientos especifiquemos el tipo de
generales o de eventos ubicados en cualquier módulo o formulario. Los módulos dato esperado en cada
estándar, por definición, no pueden almacenar procedimientos de evento. parámetro.

Para crear un módulo estándar tenemos dos formas sencillas:


• En la barra de herramientas Estándar, hacemos click en el ícono de
Agregar Módulo (Add Module)
• En la ventana de Proyecto, hacemos un click derecho y elegimos Add
Module desde el menú pop-up que aparecerá.

5.2.1.2.3. – Llamadas a Procedimientos Generales:

Cuando necesitamos ejecutar un procedimiento general, simplemente lo


llamamos. VB nos brinda para esto dos alternativas:
• Utilizar la sentencia Call
• Simplemente usar el nombre del procedimiento

La sintaxis a respetar para estas alternativas se ve a continuación:

Call nombre_procedimiento ([parametros])

ó nombre_procedimiento parametros

Cuando usamos la llamada mediante Call, los parámetros deben ir


obligatoriamente entre paréntesis, lo cual no es necesario si simplemente usamos el
nombre del procedimiento.

Programación Básica Página 4


Ejemplo 1 – Un procedimiento sencillo:

A continuación vemos como luce una pequeña aplicación de ejemplo que codificamos
para explicar la utilización de los procedimientos:

Fig: Aplicación que usa Procedimiento General Público

El procedimiento que codificamos es muy sencillo, recibe como parámetros un


argumento de tipo string y otro de tipo boolean, y arma, mediante una llamada a
MsgBox, un pequeño mensaje de bienvenida.

El procedimiento se halla codificado dentro de un módulo (llamado Module1, y asociado


al archivo Modulo1.bas), y la aplicación completa está disponible en el sitio web de la
tecnicatura (proEjemploProcedimientoGral1).

Public Sub DarBienvenida(nombre As String, Sexo As Boolean)


If Sexo = True Then
'Es una mujer
MsgBox ("Bienvenida " & nombre)
Else
'Es un varón
MsgBox ("Bienvenido " & nombre)
Cuando definimos un
End If procedimiento público
End Sub en un módulo, al
llamarlo no
Este procedimiento puede ser llamado desde el código del formulario de la aplicación, necesitamos
identificarlo
cuando se hace click sobre el botón de comando Continuar.., de la siguiente forma:
completamente
(modulo.nombreproc).
Private Sub cmdComando1_Click() Podríamos escribir
Dim Sexo As Boolean simplemente
nombreproc. Sin
If Option1(0).Value Then embargo es una buena
Sexo = True costumbre hacerlo, de
Else la misma forma que
'está activa Option1(1) cuando escribimos el
nombre de la
Sexo = False propiedad por default
End If para ciertos controles
Module1.DarBienvenida txtNombreUsuario, Sexo (Ej.: Option1.Value)
‘ Llamada mediante Call Además esta notación
elimina la ambigüedad
‘ Call Module1.DarBienvenida(txtNombreUsuario, Sexo) que se podría
End Sub presentar si tenemos
en dos módulos
diferentes dos
procedimientos con el
Notas: Option1 es un arreglo de controles que se utiliza para permitir la selección del mismo nombre.
sexo por parte del usuario. Observemos como identificamos mediante notación de punto
a qué módulo estándar pertenece el procedimiento DarBienvenida.

Programación Básica Página 5


5.2.1.2.4. – Utilización de procedimientos Function en VB:
Las funciones desde
Las funciones se comportan de una forma similar a los procedimientos, con la la versión 6.0 de VB
diferencia de que siempre retornan un valor. Por lo tanto una función puede aparecer pueden retornar
del lado derecho de una sentencia de asignación ( intA = Potencia X, Y ), o como arreglos y TDU (tipos
argumento de otra función. de datos definidos por
el usuario).
Las funciones, como vimos en su sintaxis, tienen un tipo de dato asociado, al
cual pertenece el valor que retornan.

Hasta hace unos años, la mayoría de los lenguajes de programación que


implementaban el concepto de función, únicamente permitían que las mismas retornen
datos de tipo simple (un valor entero, un valor real, un valor string...), los lenguajes más
modernos permiten que las funciones retornen valores de tipo compuesto (arreglos y
registros definidos por el usuario), lo cual le da mucha mayor potencia al lenguaje. VB
desde la versión 6.0 permite que las funciones retornen arreglos y TDU.

Ejemplo 2 – Una función sencilla:

A continuación vemos como luce una pequeña aplicación de ejemplo que codificamos
para explicar la utilización de las funciones en VB:

Fig: Ejemplo de uso de funcion

El propósito de la aplicación es sencillo, permite que el usuario ingrese un número y al


hacer click en el botón de comando ejecuta una llamada a la función factorial.

La función factorial, la hemos codificado dentro de un módulo estándar, para que pueda
ser llamada por todos los módulos y formularios de nuestra aplicación. Su código luce
como se ve a continuación:
Muchas veces las
Public Function Factorial(N As Integer) As Long funciones que
Dim T As Long definimos además de
Dim I As Integer retornar un valor
' Fact(n) = 1 * 2 * ... * (n-1) * n realizan otros procesos
(por ejemplo sobre
T=1 variables globales).
For I = 1 To N Podemos llamar a las
T=T*I funciones mediante
Next I Call para no tener
necesidad de asignar
Factorial = T el valor retornado a
End Function una variable. Es decir
que llamar a una
Observaciones: función mediante Call,
permite que la misma
- Como la función factorial crece rápidamente definimos como Long el tipo de se comporte como si
datos que retorna. Igualmente si ingresamos valores altos para N, esta fuera un
procedimiento,
función puede producir un error de desbordamiento (valor demasiado descartando su valor
grande para el tipo de datos). de retorno.

Programación Básica Página 6


- Estamos calculando la función factorial mediante el uso de una estructura
repetitiva exacta (For), mediante la misma vamos acumulando en la variable
T, el resultado de los productos.
- Es necesario tener como última sentencia del código de la función una
asignación de algún valor al nombre de la función, esto es lo que permite
que la función retorne un resultado.

Finalmente, veamos el código asociado al botón “Calcular” de nuestra aplicación, el cual


ejecuta la llamada a la función factorial.

Private Sub cmdCalcular_Click()


Dim Tempo As Long
Tempo = Module1.Factorial(txtNumero)
LblResultado.Caption = Str(Tempo)
End Sub

Siempre debemos recordar asignar el valor que nos retorna una función a una variable
del mismo tipo, o realizar la conversión necesaria.

5.2.1.2.5. – Salida de un procedimiento o función en forma anticipada:

Ya vimos que los procedimientos y funciones terminan al encontrarse la palabra


reservada End Sub, muchas veces nos interesa cancelar la ejecución del procedimiento
en forma anticipada –por ejemplo porque no se cumplen las condiciones necesarias
para ejecutar algunas acciones-, en este caso, VB nos provee la sentencia Exit Sub,
cuyo uso es muy sencillo:

Sub Division( Operador1 As Integer, Operador 2 As Integer, Resultado As Double)


If Operador2 = 0 Then
Exit Sub
End If
Resultado = Operador1 / Operador2
End Sub

En este caso tenemos un procedimiento que recibe dos números, efectúa la


división entre ellos y almacena el resultado en el tercer argumento. Para que no se
produzca un error en tiempo de ejecución estamos chequeando el divisor y si es igual a
cero, salimos en forma anticipada del procedimiento.

Con las funciones también podemos salir de forma anticipada, la instrucción que Cuando utilicemos Exit
nos permite lograr esto es Exit Sub: Function para salir de
una función recordemos
siempre asignarle en
Function DivisionStr( Operador1 As Integer, Operador2 As Integer) As String forma previa a la función
Dim Resultado As Double un valor de retorno.
If Operador2 = 0 Then
DivisionStr = “Error”
Exit Function
End If
Resultado = Operador1 / Operador2
DivisionStr = Str(Resultado)
End Sub

5.2.1.2.6. – Mecanismos de pasaje de parámetros:

Cuando les pasamos argumentos a un procedimiento o función, podemos


necesitar o no que las variables asociadas a los mismos se modifiquen cuando las
modificamos dentro del procedimiento.

Programación Básica Página 7


VB implementa los dos mecanismos de paso de parámetros habitualmente
disponibles en los lenguajes de programación:

• Paso de parámetros por valor.


• Paso de parámetros por referencia.

Paso de parámetros por Referencia:

Cuando pasamos un parámetro por referencia, la variable con la que trabaja el Es importante recordar
que en VB el
procedimiento (también denominada parámetro formal) y la variable original (parámetro mecanismo de paso de
actual), hacen referencia a la misma zona de memoria. Podemos decir que ambas son parámetros por
la misma variable identificada con dos nombres diferentes en distintas partes del default es por
programa. referencia, a diferencia
de lo que sucede en
muchos otros
Para pasar un parámetro por referencia se puede utilizar la palabra clave ByRef antes lenguajes de
del nombre del argumento en la cabecera del procedimiento, pero como este programación en los
mecanismo es el mecanismo por default no es necesario escribirlo. cuales el mecanismo
por default es por
valor.
Pasar argumentos por referencia le da al procedimiento acceso al contenido real de la
variable en su ubicación de dirección de memoria. Como resultado, el procedimiento al
que se ha pasado el valor de la variable se puede modificar de forma permanente. La
forma predeterminada de pasar valores en Visual Basic es por referencia.

Si especificamos el tipo de dato de un argumento que se pasa por referencia, debemos


pasar un valor de ese tipo para el argumento. Podemos esquivar esta restricción si
pasamos una expresión en vez de un tipo de dato como argumento. Visual Basic evalúa
la expresión y la pasa como el tipo requerido si puede.
La forma más sencilla de convertir una variable en una expresión es ponerla entre
paréntesis. Por ejemplo, para pasar una variable declarada como entero a un
procedimiento que espera un string como argumento, debemos hacer lo siguiente:

Sub ProcedimientoLlamador ()
Dim X As Integer
X = 345
Llamado(X)
End Sub

Sub Llamado(S1 As String)


MsgBox S1 'El valor de S1 es la cadena "345".
End Sub

Paso de parámetros por Valor:

En muchas ocasiones no nos interesa que los datos que recibe un procedimiento, si son
modificados, repercutan en las variables originales (parámetros actuales). Si pasamos
los parámetros por valor, VB pasa como argumentos una copia de los valores
originales, y el procedimiento trabaja sobre dicha copia. Por lo tanto los valores
originales quedan resguardados de cualquier modificación que puedan sufrir dentro del
procedimiento.

Para indicarle a VB que el paso de parámetros es por valor debemos utilizar la palabra
reservada ByVal, antes del nombre del parámetro formal, en la cabecera del
procedimiento.

Nuestro tercer ejemplo nos ayudará a clarificar esta cuestión de los mecanismos de
paso de parámetros.

Ejemplo 3 – Mecanismos de Pasaje de Parámetros:

Programación Básica Página 8


A continuación vemos la interfaz de una aplicación muy sencilla cuyo objetivo es
intercambiar el contenido de dos variables (si A tiene el valor 5 y B tiene el valor 8, luego
del intercambio A tendrá el valor 8 y B el valor 5).

Fig.: Ejemplo Mecanismos Pasaje


de Parámetros

La aplicación tiene dos botones de comando, mediante uno genera dos números al azar
para inicializar las dos variables y con el otro las intercambia. Cómo el botón de
intercambiar ejecuta el procedimiento Intercambio, codificado en un módulo estándar, el
paso de parámetros se tiene que hacer por referencia.

Veamos el código del procedimiento Intercambio:

Public Sub Intercambio(A As Integer, B As Integer)


Dim Tempo As Integer
Tempo = A
A=B
B = Tempo
End Sub

Y el código asociado al botón de comando Intercambiar:

Private Sub cmdIntercambiar_Click()


Module1.Intercambio intA, intB
Mostrar
End Sub

Podríamos haber escrito las llamadas a los procedimientos habiendo hecho uso de Call,
con el mismo resultado:

Private Sub cmdIntercambiar_Click()


Call Module1.Intercambio (intA, intB)
Call Mostrar
End Sub Los parámetros por
valor se comportan
como variables locales
Nota: Si en el procedimiento Intercambio, en lugar de utilizar paso de parámetros por al procedimiento que al
referencia, hubiésemos usado paso de parámetros por valor, la cabecera del mismo momento de comenzar
hubiera quedado de la siguiente forma: a ejecutarse se
inicializan con los
valores de los
Public Sub Intercambio(ByVal A, ByVal B As Integer) argumentos
(parámetros actuales).
En este caso no obtenemos el resultado deseado: el procedimiento recibe como Cuando el
procedimiento termina
argumentos A y B, la copia de las variables originales utilizadas en la llamada al los parámetros por
procedimiento, realiza el intercambio correctamente (pero sobre las copias) y por lo valor dejan de existir.
tanto cuando retornamos a la sentencia siguiente a la llamada al procedimiento, las
variables originales conservan el valor que tenían al momento de la llamada a
Intercambio.

Programación Básica Página 9


5.2.1.2.7. – Paso de parámetros de tipo array:

Las funciones y los procedimientos pueden recibir parámetros que sean del tipo
array. Este concepto es muy potente pero es fácil de visualizar mediante un ejemplo. El
siguiente trozo de código implementa una función que recibe un parámetro vector y
retorna la sumatoria de sus elementos:

Private Function Sumatoria(intVector() As Integer)


Dim I As Integer
Dim total As Single

For I = LBound(intVector) To UBound(intVector)


total = total + intVector(I)
Next I

Sumatoria = total
End Function

Podría ser llamada de la siguiente forma:

Dim vector(10) As Integer


Dim I As Integer
Dim Prom As Single

For I = 0 To 10
vector(I) = I
Next I

Prom = Sumatoria(vector)
MsgBox Prom, , "Sumatoria"

También es posible pasar como argumentos vectores expresados por


enumeración dentro de la misma llamada, veamos el siguiente ejemplo:

Private Function Promedio(ParamArray arguments() As Variant) As Single El uso de ParamArray


Dim I As Integer es opcional y sólo se
Dim total As Single puede utilizar como
último argumento de la
lista de argumentos,
For I = LBound(arguments) To UBound(arguments) para indicar que el
total = total + arguments(I) último argumento es
Next I una lista opcional de
elementos Variant.
Promedio = total / (UBound(arguments) - LBound(arguments)) Permite recibir un
End Function número arbitrario de
argumentos, y no
Esta función podría llamarse de la siguiente forma: puede utilizarse con
ByVal o ByRef.

Private Sub Command1_Click()


MsgBox Promedio(1, 2, 3, 4, 5)
End Sub

5.2.1.2.8. – Funciones que retornan arreglos y TDU:

En VB las funciones pueden retornar arreglos y tipos de datos definidos por el


usuario. Arreglos y tipos de datos definidos por el usuario se tratarán en detalle en
unidades siguientes, aquí se utilizarán para ilustrar el uso de objetos complejos en el
pasaje de parámetros. Esto es muy útil, porque de esta forma podemos, por ejemplo,
asignar un vector a otro como resultado de una llamada a una función, si no tendríamos
esta posibilidad, deberíamos usar un procedimiento y manejar estos datos como
parámetros por referencia, o manejar los elementos del vector por referencia.

Programación Básica Página 10


Ejemplo 4: Retornando un vector desde una función

Es muy cómodo poder utilizar funciones que retornen arreglos dinámicos, las
mismas pueden ser llamadas desde procedimientos donde se declaren arreglos
dinámicos, y van a permitir una asignación del resultado de esta función a alguna
variable que sea un arreglo dinámico.

Por ejemplo la siguiente función:

Private Function VectorNumeros(n As Integer, c As Integer, s As Integer) As Integer()


Dim vector() As Integer
Dim i As Integer

ReDim vector(n)
vector(0) = c
For i = 1 To n
vector(i) = vector(i - 1) + s
Next i

VectorNumeros = vector
End Function

Recibe tres parámetros enteros, y genera un vector que contiene una secuencia
de n+1 componentes (del 0 al n) que comienza con el elemento c y va creciendo con
incrementos de s. Observemos en la cabecera de la función que indicamos como As
Integer() el valor retornado por la función, que es del tipo array. Dentro de la función
declaramos un vector dinámico, lo dimensionamos (con Redim) según el primer
parámetro, y luego de generarlo, se lo asignamos a la función como valor de retorno.

Esta función la podemos llamar de la siguiente forma:

Private Sub Form_Load()


......
Dim vector() As Integer

' Obtenemos el vector de numeros


vector = VectorNumeros(5, 0, 3)

También es posible retornar TDUs como resultado de una función. Puede ser
útil codificar una función que retorne un valor del tipo TDU deseado, con los campos
inicializados con su contenido por default.

Ejemplo 5: Retornando un TDU desde una función

‘Definición del TDU

Private Type Persona


Nombre As String * 20
Apellido As String * 30
Ciudad As String * 30
Pais As String * 30
Telefono As String * 10
End Type

Private Function Inicializa() As Persona


Inicializa.Nombre = ""
Inicializa.Apellido = ""
Inicializa.Ciudad = "Buenos Aires"
Inicializa.Pais = "Argentina"

Programación Básica Página 11


Inicializa.Telefono = "54-11-"
End Function

Private Sub Form_Load()


Dim P As Persona

P = Inicializa
End Sub

Observemos:
- que al escribir As Persona, en la cabecera de la función estamos
especificando que la función retornará un tipo de datos que es un TDU, por
eso dentro de la función podemos especificar cada uno de los elementos del
TDU con notación de punto.
- que podemos hacer P = Inicializa, y que en este caso la llamada a la
función se evalúa y retorna un valor del tipo Persona, que se asigna a P.

5.3. – Depuración de nuestras aplicaciones:

Aunque el tema de la detección y el manejo de los errores en cualquier lenguaje


de programación es bastante complejo, queremos terminar esta unidad con una
introducción a las herramientas de depuración de programas que nos brinda VB.

Depurar o realizar el seguimiento de un programa, consiste en probar el mismo,


en aquellas secciones del código donde tengamos dudas sobre su comportamiento.
Básicamente, será muy útil poder realizar un seguimiento paso a paso (instrucción por
instrucción) e ir visualizando el valor que a cada momento van tomando las variables
para ver si las mismas se comportan como lo esperábamos.

Supongamos que tenemos el siguiente código de ordenamiento de un vector:

Private Sub cmdOrdenar1_Click()


Dim I, J, Tempo As Integer
'Ordenamiento según algoritmo burbuja
For I = 0 To 4
For J = (I + 1) To 5
If Vector(I) > Vector(J) Then
Tempo = Vector(I)
Vector(I) = Vector(J)
Vector(J) = Tempo
End If
Next J
Next I

Si queremos realizar un seguimiento del mismo durante su ejecución, podemos


hacerlo mediante la inserción de uno o más puntos de interrupción.

5.3.1.- Puntos de Interrupción (Break Points):

Un punto de interrupción es un indicador que podemos insertar en el código de También podemos


nuestra aplicación. Cuando VB está ejecutando una aplicación y se encuentra con un ingresar en modo
depuración, utilizando
punto de interrupción, entra en “modo depuración”. Este modo nos permite ir viendo el el menú Run/Break
valor de las variables, ejecutar sentencia por sentencia, probar las líneas de código y (Ejecutar/Interrumpir)
muchas cosas más. , o pulsando
Ctrl+Pause en
cualquier momento
Para insertar un punto de interrupción en nuestro código, abrimos el menú durante la ejecución
Debug (Depuración) y seleccionamos Toogle Breakpoint (Alternar puntos de del programa.
interrupción). Cuando ubicamos un punto de interrupción, la línea se resalta con otro

Programación Básica Página 12


color y aparece un círculo indicativo a la izquierda, como podemos ver en la siguiente
figura:

Fig.: Inserción de un punto de Interrupción

Para abandonar el modo de depuración, tenemos dos opciones:

• Seguimos ejecutando el programa, mediante la pulsación de F5 o desde el


menú Run/Continue.
• Lo detenemos completamente desde el menú Run/End
(Ejecutar/Terminar).

5.3.2.- Ejecución Paso a Paso:

Cuando VB ingresó en modo depuración (ya sea porque encontró un punto de


interrupción o porque pulsamos Ctrl+Pause), tenemos la posibilidad de ir ejecutando el
código sentencia por sentencia, lo cual nos muestra sin lugar a dudas que camino sigue
el flujo de la ejecución dentro de un proceso.

Tenemos diferentes opciones para indicar como queremos que se vaya


ejecutando el programa:
- F8: (Paso a paso por instrucciones), ejecuta una sentencia por vez. La
sentencia a ser ejecutada se resalta en otro color y con una flecha a su
izquierda.
- Shift+F8: (Paso a paso por procedimientos), ejecuta una sentencia a la vez,
pero si hay llamadas a procedimientos, no ingresa en ellos, sino que los
ejecuta en forma completa.
- Ctrl+Shift+F8: (Paso a paso hasta salir), ejecuta las sentencias siguientes
hasta terminar el procedimiento donde se encuentra el punto de
interrupción.
- Ctrl+F8: (Ejecutar hasta el cursor), muchas veces puede ser muy tedioso
tener que ejecutar paso a paso estructuras repetitivas, o un grupo grande de
sentencias que sabemos que funcionan correctamente. Es muy cómodo
entonces, colocar el cursor unas cuantas líneas más abajo, y pulsar
Ctrl+F8, de esta forma se ejecutarán todas las sentencias entre la línea
actual, y la línea donde se encuentra el cursor.

5.3.3.- Visualizando el contenido de las variables:

VB nos brinda la ventana de Inspecciones, para visualizar allí el contenido de las


variables que nosotros le indiquemos. Tenemos las siguientes alternativas:

- Si ubicamos el puntero del mouse sobre el nombre de la variable, aparecerá


un recuadro con el contenido actual de la misma.

Programación Básica Página 13


- Posicionamos el cursos del teclado sobre la variable cuyo contenido nos
interesa sabar, y pulsamos Shift+F9, esta opción nos abre la ventana de
Inspección Rápida (Quick Watch), que vemos a continuación:

Fig.: Ventana de Inspección Rápida

- Cuando necesitamos visualizar el valor de varias variables, lo más


adecuado es utilizar la ventana de Inspecciones (Watch): podemos
agregar variables a esta ventana de varias formas:
o Seleccionar la variable y crear una inspección o watch, desde el
menú Depuración (Debug), mediante la opción Agregar
Inspección (Add Watch).
o Abrir una ventana de inspección rápida para la variable y
seleccionar Agregar (Add).

En la siguiente figura se visualiza la ejecución del algoritmo de ordenamiento que


mostrábamos más arriba, con una ventana de inspección adecuada para ir visualizando
el valor de las variables durante su ejecución:

Fig.: Ejecución paso a paso y Ventana de Inspecciones

5.3.4.- Ventanas Locales, Inmediato y Pila de Llamadas :

q La ventana Locales nos permite visualizar el estado de todas las variables que
se encuentran definidas en el ambiente de la instrucción que se está ejecutando
cuando estamos en modo depuración.

q La ventana Inmediato nos permite ejecutar instrucciones y ver el resultado de


La ventana Inmediato,
las mismas inmediatamente. es muy cómoda para
La forma de utilizarla es muy sencilla: evaluar rápidamente
como se comportan las
funciones predefinidas
• Desde el menú Ver (View), elija la ventana Inmediato (Inmediate). de VB que todavía no
• Para evaluar expresiones en forma inmediata, debemos escribir Print conocemos en
seguido de la expresión que queremos evaluar, y luego pulsar Enter. En la profundidad.
línea siguiente se visualizará el resultado de dicha expresión.

Programación Básica Página 14


Fig.: Ventana Inmediato

q La ventana Pila de Llamadas (Call Stack), nos permite saber exactamente


como se fueron produciendo las activaciones de los procedimientos y funciones
hasta llegar a aquel en el cual se encuentre detenida la ejecución. Es muy fácil
insertar un punto de interrupción dentro de un procedimiento y cuando entramos
en modo de depuración, visualizamos esta ventana para obtener todos los
procedimientos que ser fueron activando hasta llegar al procedimiento que nos
interesa.

Para visualizar esta ventana ejecutamos el menú Ver (View), opción Call Stack
(Pila de Llamadas), o simplemente pulsamos Ctrl-L.

En la figura siguiente vemos la ventana Pila de Llamadas, la cual fue activada


cuando se estaba ejecutando un procedimiento declarado dentro de un módulo.
El procedimiento en ejecución es el que se encuentra en el tope de la pila (el
primero de arriba hacia abajo), el procedimiento que llamó a este, se encuentra
inmediatamente debajo. El procedimiento que se encuentre en el extremo
inferior de la pila, será aquel que haya desencadenado la cadena de llamadas.

Fig.: Ventana Pila de Llamadas

Programación Básica Página 15


5.4. – Índice de Aplicaciones de Ejemplo:

Hemos preparado algunas aplicaciones como ejemplo de los temas


desarrollados en esta unidad. Las mismas se encuentran disponibles en el sitio web de
la Tecnicatura. A continuación se lista cada aplicación con su nombre y su objetivo.

Consideramos especialmente importante que los alumnos se familiaricen con el


hábito de leer y analizar código escrito por otros programadores, es por eso que
recomendamos que utilicen estas aplicaciones para estudiar la forma en que se hace
uso de los conceptos de esta unidad.

Aplicación Objetivo
proEjemploProcedimientoGeneral1 Un procedimiento sencillo, definido en un módulo.
proEjemploFuncion1 Una función sencilla: cálculo del factorial de un
número.
proEjemploPasodeParametros Ejemplo de paso de parámetros por valor y por
referencia: procedimiento Intercambio.

Las aplicaciones de esta unidad tienen un objetivo principal que consiste en que
veas cómo se pueden organizar de una manera cómoda y prolija, la estructura de los
programas, mediante el uso de funciones, procedimientos y módulos.

Programación Básica Página 16


5.5.- Cuestionario Unidad 5:

1. La principal diferencia entre un procedimiento y una función es:


La función no puede recibir parámetros por referencia [ ]
El procedimiento no puede recibir parámetros por valor [ ]
La función siempre retorna un valor [ ]
Ninguna de las anteriores [] Ayuda?

2. Marca con una cruz las frases incorrectas:


Los procedimientos de eventos los definimos en los módulos [ ]
En los formularios se pueden definir procedimientos generales [ ]
Las funciones sólo pueden recibir parámetros por referencia [ ]
Ayuda?

3. Marca con una cruz las frases correctas:


El paso de parámetros por default es ByRef (por referencia) [ ]
Si pasamos un parámetro ByVal, al modificarlo también
se modifican los parámetros actuales. [ ]
Los arreglos sólo se pueden pasar por referencia. [ ]
Los TDU sólo se pueden pasar por valor. [ ] Ayuda?

4. Marca con una cruz las frases incorrectas:


Las llamadas mediante Call siempre llevan paréntesis [ ]
La última sentencia de una función tiene que ser una asignación
del valor de retorno de la función al nombre de la misma [ ]
Los procedimientos no pueden utilizar parámetros por referencia
para retornar valores [ ]
Ayuda?

5. Marca con una cruz las frases correctas:


La lista de parámetros (A,B As Integer) especifica que los
parámetros A y B serán de tipo entero y por copia [ ]
La lista de parámetros (A As Integer ,B As Integer) especifica que los
parámetros A y B serán de tipo entero y por referencia [ ]
Ayuda?

6. Marca con una cruz las frases correctas:


Los puntos de interrupción implican la detención total del programa [ ]
Los puntos de interrupción permiten entrar en modo depuración [ ]
La forma más sencilla de visualizar el estado de todas las variables
locales de un procedimiento es la ventana de Inspecciones [ ]
La forma más sencilla de visualizar el estado de todas las variables
locales de un procedimiento es la ventana Locales [ ]
Ayuda?

Programación Básica Página 17

Anda mungkin juga menyukai