Você está na página 1de 7

Unidad 12.

Funciones en VB
12.1. Objetivos del tema.
Vamos a ver en este tema las funciones en el lenguaje Visual Basic 2005.
12.2. Introduccin.
La programacin est basada en las estructuras.
Estructuras de datos y estructuras de programas.
Los programas son a su vez contenedores de estructuras de elementos individuales
que ejecutan cdigo.
El elemento ms pequeo es la instruccin.
Despus nos encontramos con procedimientos y funciones.
El siguiente nivel es la clase y por ltimo el programa.

Los procedimientos y las funciones, dependiendo de la estructura del lenguaje


utilizado, y del estilo de programacin individual de cada uno, estn bien en
mdulos independientes, de forma que son pblicos para toda la aplicacin, o de
forma privada en el interior de un programa, o una clase.

En VB, las funciones son funciones y podrn o no pertenecer a una clase y ser un
mtodo, se albergar en el interior de una clase, haciendo referencia al mismo
mediante el nombre de la clase y a continuacin el de la funcin, mtodo, o si est
en el mismo nivel, con utilizar la funcin es suficiente, como vemos en el ejemplo.

Console.Writeline(Factorial de 3 es " ,FuncionFactorial(3))

Pero no toda la resolucin de una clase se realiza mediante cdigo que se pueda o
se tenga que traducir en un mtodo.
La programacin adems se basa en la divisin de un problema grande, en varios
pequeos, aquello de divide y vencers, por lo que por esa misma filosofa es
imposible, e ilgico, que todo se convierta en mtodos.
Los mtodos son la parte lgica visible de una clase, lgica en cuanto a que es
aquello que cara al usuario le ayuda a resolver un problema en pasos
comprensibles para l.
Con las funciones sucede lo mismo, al fin y al cabo, no son nada ms que otra de
las herramientas de programacin.

Para crear una funcin la sintaxis es la siguiente:

Private Function FuncionFactorial(ByVal n As Integer) As Integer

La funcin puede estar en el programa


Private
o en un mdulo distinto,
Public
La palabra reservada que indica que es una funcin
Function
Despus lo que sigue es el nombre de la funcin,
FuncionFactorial
Entre parntesis los datos que se reciben, indicando el tipo de cada uno de ellos,
(ByVal n as Integer)
El tipo de dato que se devuelve en la funcin,
Integer
A continuacin empieza el cdigo de la funcin que acaba con la lnea
End Function.

Private Function FuncionFactorial(ByVal n As Integer) As Integer


If (n <= 1) Then
FuncionFactorial = 1
Else
FuncionFactorial = n * FuncionFactorial(n - 1)
End If
End Function

En el ejemplo vemos la funcin, esta funcin calcula el factorial de un nmero, otro


tema es que sea la mejor solucin, pero es una funcin.

En el siguiente ejemplo se invierte el contenido de una variable de tipo string.

Public Function InvierteCadena(ByVal Cadena As String) As String


Dim Result As String = ""
Dim x As Integer

While x <> Len(Cadena)


x=x+1
Result = Mid(Cadena, x, 1) & Result
End While

InvierteCadena = Result
End Function

El uso de la funcin anterior puede quedar :

Cadena = InvierteCadena(Cadena)
12.3. Escribir la funcin.
Vemos el ejemplo de una funcin.
Como hemos comentado antes, primero se indica el mbito de la funcin, pblico o
privada, despus la palabra que ndica que es una funcin, no un procedimiento.

Public Function InvierteCadena(ByVal Cadena As String) As String


Dim Result As String = ""
Dim x As Integer

While x <> Len(Cadena)


x=x+1
Result = Mid(Cadena, x, 1) & Result
End While
InvierteCadena = Result
End Function

El nombre de la funcin InvierteCadena y los argumentos que va a recibir, Cadena


como string, y se recibe por valor, en VB hay que indicarlo, por defecto aparecer
siempre por valor, ByVal.

Despus se inicia el cdigo de la funcin

Dim Result As String = ""


Dim x As Integer

While x <> Len(Cadena)


x=x+1
Result = Mid(Cadena, x, 1) & Result
End While

Finalizada la ejecucin de la funcin se asigna su resultado a la misma.

InvierteCadena = Result

Y la funcin que finalizar con la lnea

End Function

La devolucin del resultado de la ejecucin de la funcin se obtiene con la lnea

InvierteCadena = Result

O bien como sigue:

FuncionFactorial = n * FuncionFactorial(n - 1)

En este ejemplo lo que se muestra es una utilizacin recursiva de la misma.

El nombre de la funcin es la encargada de recibir el valor que se va a devolver al


punto de llamada de la misma, y el dato que se le asigna debe ser del mismo tipo
que se declara en la funcin.

Private Function FuncionFactorial(ByVal n As Integer) As Integer

Public Function InvierteCadena(ByVal Cadena As String) As String

12.4. Envo y recepcin de los datos.


La creacin de procedimientos y funciones, conlleva la necesidad de envo y
recepcin de variables, de datos. Hay dos formas de enviar datos a un
procedimiento,

Por valor
Por referencia

En el primero de los casos la variable que recibe el procedimiento, puede ser


utilizada en el interior del mismo, pero los cambios que sufra, no podrn ser
devueltos al programa que lo ha llamado, el procedimiento recibe el valor de la
variable, pero no la variable.

Por referencia, sin embargo la variable recibida podr ser utilizada y si ha sufrido
cambio en su valor, ste podr ser devuelto al programa que lo ha llamado, el
procedimiento recibe una referencia a la variable, por lo tanto los cambios que se
realicen a la misma, perduran a la finalizacin del procedimiento, o funcin.

En VB se puede recibir datos por valor, ByVal, y por referencia, ByRef, tanto en un
procedimiento, SUB, o una funcin, Function.
Dicho de otra forma, podramos enviar datos por referencia a una funcin y recibir
datos devueltos en el nombre de la funcin y en la variable que nosotros
consideremos adecuado.
Un ejemplo:

Private Function InvierteCadena(ByVal Cadena As String, ByRef R As String) As


String
Dim Result As String = ""
Dim x As Integer

While x <> Len(Cadena)


x=x+1
Result = Mid(Cadena, x, 1) & Result
End While
InvierteCadena = Result
R = Result
End Function

En este ejemplo, se ha aadido a la funcin la variable

, ByRef R As String)

Que podemos observar que es por referencia, ByRef, y despus para probar que se
puede utilizar:

R = Result

Al final de la funcin, y el resultado de ejecutar

Sub Main()
Dim C As String = ARROZ
Dim R As String
Console.WriteLine("Valor por referencia en una funcin")
Console.WriteLine("Cadena invertida {0} es {1} ", C, InvierteCadena("ARROZ", R))

Console.WriteLine("La cadena invertida {0} es {1} ", C, R)


Console.ReadKey()
End Sub

es el que sigue:

Valor por referencia en una funcin


La cadena invertida ARROZ es ZORRA
La cadena invertida ARROZ es ZORRA

Y como se puede comprobar, la funcin solo se ejecuta una vez.


Pero a pesar de eso, no debemos utilizar esta estrategia, una funcin debe devolver
el dato en su nombre.
12.5. Conclusiones.
El paso de datos se puede hacer por valor y por referencia,
Los datos han de enviarse en el mismo orden en el que se reciben en la funcin.
Han de ser del mismo tipo.
No tienen porque llamarse de la misma forma.
No hay valores opcionales.
Ejercicios unidad 12: Funciones en VB

1.
Hallar el rea y la longitud de una circunferencia, solicitando el radio de la
misma R . Area = PI * R al cuadrado, Longitud = 2 * PI * R .
2.

Hallar el rea de un tringulo. Area = Base por Altura / 2.

3.

Introducir un nmero A y visualizar si es o no primo.

4.
Introducir una calificacin (entre cero y diez), e imprimir su equivalente
alfabtico, segn la siguiente tabla.
De 3

-------> M.D.

Desde 3 y menor que 5 -------> INS.


Desde 5 y menor que 6 -------> SUF
Desde 6 y menor que 7 -------> BIEN
Desde 7 y menor que 9 -------> NOT.
Desde 9 hasta 10

-------> SOB.

5.
Introducir un valor en metros y visualizar su valor en millas terrestres,
marinas , yardas y leguas.
Milla terrestre = 1.609,34 m.
Milla marina = 1.852,00 m.
Yarda = 4.190 m.
Legua = 0,9144 m.
6.
Introducir una fecha en pantalla con el formato da, mes y ao en tres
variables numricas, validar la fecha y emitir el mensaje de fecha incorrecta o
correcta.
7.
A partir de los siguientes valores de moneda extranjera, crear una funcin que
a partir de un importe en pesetas devuelva su equivalente en la moneda que se
indique.
1 Franco francs

25,2400

25,3920

0,0859

0,0864

1 Libra esterlina

245,5560

247,0340

1 Dlar americano

150,2280

151,1320

84,6480

85,1570

101,7550

102,3670

1 Lira

1 Marco alemn
1 Franco suizo
1 Florn holands

5,1170

75,5690

1 Escudo portugus

0,8262

0,8312

Você também pode gostar