Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Los nombres de los procedimientos tienen reglas de visibilidad parecidas a las de las
variables. Para llamar desde un formulario a un procedimiento Public definido en otro
formulario es necesario preceder su nombre por el del formulario en que est definido.
Sin embargo, si se desea llamar a un procedimiento definido en un mdulo estndar (*.bas)
no es necesario precederlo del nombre del mdulo ms que si hay coincidencia de nombre
con otro procedimiento de otro mdulo estndar.
3.8.3 Funciones (function)
La sintaxis correspondiente a una funcin es la siguiente:
donde nombre es el nombre de la funcin. Ser de un tipo u otro dependiendo del dato que
devuelva. Para especificar el tipo se utiliza la clusula As Tipo (Integer, Long, Single,
Double, Currency, String o Variant). parmetros son los argumentos que son pasados
cuando se llama a la funcin. Visual Basic asigna el valor de cada argumento en la llamada
al parmetro que ocupa su misma posicin. Si no se indica un tipo determinado los
argumentos son Variant por defecto. Como se ver en un apartado posterior, los
argumentos pueden ser pasados por referencia o por valor.
El nombre de la funcin, que es el valor de retorno, acta como una variable dentro del
cuerpo de la funcin. El valor de la variable expresion es almacenado en el propio nombre
de la funcin. Si no se efecta esta asignacin, el resultado devuelto ser 0 si la funcin es
numrica, nulo ("") si la funcin es de caracteres, o Empty si la funcin es Variant.
Exit Function permite salir de una funcin antes de que sta finalice y devolver as el
control del programa a la sentencia inmediatamente a continuacin de la que efectu la
llamada a la funcin.
La sentencia End Function marca el final del cdigo de la funcin y, al igual que la Exit
Function, devuelve el control del programa a la sentencia siguiente a la que efectu la
llamada, pero lgicamente una vez finalizada la funcin.
La llamada a una funcin se hace de diversas formas. Por ejemplo, una de las ms usuales
es la siguiente:
variable = nombre([argumentos])
donde argumentos son un lista de constantes, variables o expresiones separadas por comas
que son pasadas a la funcin. En principio, el nmero de argumentos debe ser igual al
nmero de parmetros de la funcin. Los tipos de los argumentos deben coincidir con los
tipos de sus correspondientes parmetros, de lo contrario puede haber fallos importantes en
la ejecucin del programa. Esta regla no rige si los argumentos se pasan por valor
(concepto que se ver ms adelante).
En cada llamada a una funcin hay que incluir los parntesis, aunque sta no tenga
argumentos.
El siguiente ejemplo corresponde a una funcin que devuelve como resultado la raz
cuadrada de un nmero N:
La llamada a un procedimiento Sub puede ser de alguna de las dos formas siguientes:
Call nombre[(argumentos)]
o bien, sin pasar los argumentos entre parntesis, sino ponindolos a continuacin del
nombre simplemente separados por comas:
nombre [argumentos]
A diferencia de una funcin, un procedimiento Sub no puede ser utilizado en una expresin
pues no devuelve ningn valor. Por supuesto una funcin puede ser llamada al modo de un
procedimiento Sub, pero en esta caso no se hace nada con el valor devuelto por la funcin.
El siguiente ejemplo corresponde a un procedimiento Sub que devuelve una variable F que
es la raz cuadrada de un nmero N.
Sub Raiz (N As Double, F As Double)
If N < 0 Then
Exit Sub 'Se mandara un mensaje de error
Else
F = Sqr(N)
End If
End Sub
La llamada a este procedimiento Sub puede ser de cualquiera de las dos formas siguientes:
Raiz N, F
Call Raiz(N, F)
Cuando se llama a una funcin o a un procedimiento Sub, se podr especificar que el valor
de una argumento no sea cambiado por la funcin o por el procedimiento, poniendo dicho
argumento entre parntesis en la llamada. Un argumento entre parntesis en la llamada es
un argumento pasado por valor. Por ejemplo,
El argumento Num es pasado por valor. Significa que lo que se pasa es una copia de Num.
Si el procedimiento cambia ese valor, el cambio afecta slo a la copia y no a la propia
variable Num.
Otra forma de especificar que un argumento ser siempre pasado por valor es anteponiendo
la palabra ByVal a la declaracin del parmetro en la cabecera del procedimiento (Sub o
Function).
Por ejemplo,
Function Raiz (ByVal N As Double)
Sub Raiz (ByVal N As Double, F As Double)
Pasar argumentos por valor evita modificaciones accidentales, pero tiene un coste en
tiempo y memoria que puede ser significativo cuando se pasan grandes volmenes de
informacin, como sucede con vectores, matrices y estructuras.
No todas las funciones que se pueden llamar en Visual Basic 6.0 admiten argumentos con
nombre. Con AutoQuickInfo puede obtenerse ms informacin al respecto.
3.9 ARRAYS
Un array permite referirse a una serie de elementos del mismo tipo con un mismo nombre,
y hace referencia un nico elemento de la serie utilizando uno o ms ndices, como un
vector o una matriz en lgebra.
Visual Basic 6.0 permite definir arrays de variables de una o ms dimensiones (hasta 60) y
de cualquier tipo de datos (tipos fundamentales y definidos por el usuario). Pero adems
Visual Basic introduce una nueva clase de arrays, arrays de controles, esto es, (arrays de
botones, de etiquetas, de paneles, etc.) que permiten una programacin ms breve y clara.
En este apartado slo se tratarn los arrays de variables.
Todos los elementos de un array deben ser del mismo tipo y estn alamacenados de forma
contigua en la memoria. Por supuesto, si el array es de tipo Variant cada elemento puede
contener un dato de tipo diferente, e incluso puede contener otro array.
Entre los arrays de variables cabe distinguir dos tipos fundamentales, dependiendo de que
nmero de elementos sea constante o pueda variar durante la ejecucin del programa.
Este ejemplo declara un array de una dimensin, llamado vector, con veinte elementos,
vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar un Double.
Salvo que se indique otra cosa, los ndices se empiezan a contar en cero.
Dim matriz(3, 1 To 6) As Integer
Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4x6 elementos,
matriz(0,1), ... matriz(3,6), de tipo entero.
La declaracin de los arrays estticos es bastante cmoda. Se declaran una vez. Sin
embargo tienen el inconveniente que en la mayora de los casos estn sobredimensionados
y utilizan ms memoria de la que realmente necesitan. Esto implica que se est
malgastando memoria. Para solucionar este problema se utilizan los arrays dinmicos.
Para crear un array dinmico primero hay que declararlo como si fuera una array esttico,
pero sin darle dimensin. Es decir, se deja la lista -entre parntesis- vaca sin ponerle
ningn nmero.
Esto se hace con la sentencia Public si se quiere que sea global, con Dim o Private si se
quiere a nivel de mdulo o con Static, Dim o Private si se quiere que sea local.
Para asignar el nmero actual de elementos del array se utiliza la sentencia ReDim. La
sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el
nmero de elementos del array y sus lmites inferior y superior, pero no el nmero de
dimensiones. Esto quiere decir que, por ejemplo, no se puede trasformar un vector en una
matriz.
ms tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica a
continuacin:
Sub Calculo( )
...
ReDim Matriz(F, C)
...
End Sub
Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se
pierden (si son Variant se ponen a Empty; si son numricos a cero y si son cadenas de
caracteres a la cadena vaca). Cuando interese cambiar el tamao del array conservando los
valores del array, hay que ejecutar ReDim con la palabra clave Preserve. Por ejemplo,
supngase un array A de dos dimensiones. La sentencia,
ReDim Preserve A(D1, UBound(A, 2) + 2)
incrementa el tamao del array en dos columnas ms. Cuando se utiliza la palabra Preserve
no puede cambiarse el ndice inferior del array (s el superior). La funcin UBound del
ejemplo devuelve el valor ms alto de la segunda dimensin.
Para crear una estructura con Visual Basic 6.0 hay que utilizar la sentencia Type ... End
Type. Esta sentencia solamente puede aparecer en la seccin General o de declaraciones de
un mdulo. Pueden crearse como Public o como Private en un mdulo estndar o de clase
y slo como Private en un formulario. Dim equivale a Public. Vase el siguiente ejemplo,
Public Type Ficha
Nombre As String
Direccion As String *40
Telefono As Long
DNI As Long
End Type
Este ejemplo declara un tipo de datos denominado Ficha que consta de cuatro miembros o
campos, denominados Nombre, Direccion, Telefono y DNI.
Una vez definido un nuevo tipo de datos, en un mdulo estndar o de clase se pueden
declarar variables Public o Private de ese tipo (en un formulario slo Private), como por
ejemplo:
Public Alumn as Ficha
A su vez, un miembro de una estructura puede ser otra estructura, es decir un tipo definido
por el usuario. Por ejemplo,
Type Fecha
Dia As Integer
Mes As Integer
Anio As Integer
End Type
Type Ficha
Alta As Fecha
Nombre As String
Direccion As String * 40
Telefono AS Long
DNI As Long
End Type
Dentro de una estructura puede haber arrays tanto estticos como dinmicos.
En Visual Basic 6.0, a la hora de declarar arrays de estructuras, sucede lo mismo que al
declarar arrays de cualquier tipo de variables. Con Alum(1 To 40), se crea un vector de
estructuras de 40 elementos de tipo Ficha (Alum(1), Alum(2), ..., Alum(40)). Con
Alum(40), se crea un vector de estructuras de 41 elementos (Alum(0), Alum(1), ...
Alum(40)).
Es posible asignar una estructura a otra del mismo tipo. En este caso se realiza una copia
miembro a miembro. Vase el siguiente ejemplo:
Alumn(1) = delegado
Continuar.....
Nota de Radaccin: El lector puede descargar este captulo y captulos anteriores del curso
desde la seccin Artculos Tcnicos en el sitio web de EduDevices
(www.edudevices.com.ar )