Sunteți pe pagina 1din 5

aprenderaprogramar.

com

Visual Basic: procedimientos Sub y


funciones Function. Tipos de
parmetros y tipos de retorno.
Ejemplos (CU00340A)
Seccin: Cursos
Categora: Curso Visual Basic Nivel I
Fecha revisin: 2029
Autor: Mario R. Rancel
Resumen: Entrega n39 del Curso Visual Basic Nivel I

29

2006-2029 aprenderaprogramar.com

Procedimientos y funciones genricas en Visual Basic. Parmetros de entrada.

MDULOS GENRICOS Y PARMETROS DE ENTRADA EN VISUAL BASIC.


Ya hemos visto que en Visual Basic una declaracin de procedimiento siempre lleva unos parntesis
donde se pueden indicar parmetros de entrada. Los parmetros de entrada son indicados por el
programador, o bien se generan automticamente al tener lugar un evento y el propio ordenador enva
ese parmetro de entrada al procedimiento que se dispara como consecuencia de que tenga lugar el
evento. Veamos algunos ejemplos de procedimientos asociados a eventos.

Cdigo 1 (versiones menos recientes VB)


Private Sub Text1_Change()

Cdigo 1 (versiones ms recientes VB)


Private Sub TextBox1_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
TextBox1.TextChanged

End Sub
End Sub

Cdigo 2 (versiones menos recientes VB)


Private Sub Text1_KeyPress(KeyAscii
As Integer)

Cdigo 2 (versiones ms recientes VB)


Private Sub Text1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox1.KeyPress

End Sub
End Sub

El primer cdigo corresponde a un procedimiento conducido por eventos que se invoca cuando el texto
contenido en el TextBox Text1 cambia. En las versiones menos recientes de Visual Basic algunos
procedimientos conducidos por eventos no tienen parmetros de entrada. En las versiones ms
recientes siempre suelen aparecer unos parmetros de entrada.
El segundo cdigo sera el de un procedimiento conducido por eventos que se invoca cuando se
produce la pulsacin de una tecla en el TextBox1. En este caso, en las versiones menos recientes hay un
parmetro (podra haber varios) que es enviado al procedimiento cuando tiene lugar el evento: un valor
tipo Integer que se corresponde con el nmero asociado a la tecla pulsada segn el cdigo AscII. En las
versiones ms recientes esa informacin viene dentro del parmetro e que lleva distinta informacin
asociada relacionada con el evento. Crea un TextBox, un Label y prueba el siguiente cdigo:

2006-2029 aprenderaprogramar.com

Procedimientos y funciones genricas en Visual Basic. Parmetros de entrada.

Cdigo versiones menos recientes VB:


'Curso VB aprenderaprogramar.com
Private Sub Text1_KeyPress(KeyAscii As
Integer)
Label 1 = ""
Label 1 = KeyAscii
End Sub

Cdigo versiones ms recientes VB:


REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
Private Sub TextBox1_KeyPress(ByVal sender As Object,
ByVal e As System.Windows.Forms.KeyPressEventArgs)
Handles TextBox1.KeyPress
Label1.Text = ""
Label1.Text = "Valor numrico asociado a la tecla
pulsada es " & Microsoft.VisualBasic.Asc(e.KeyChar)
End Sub
End Class

Comprobars que cada vez que pulsas una tecla sobre el TextbBox aparece en pantalla un nmero: para
la A, el 65, y para la a, el 97. Ese nmero es informacin que se pasa automticamente al procedimiento
cuando tiene lugar el evento. De esta forma se obtiene informacin til sobre lo que est pasando (qu
tecla ha pulsado el usuario, por dnde ha movido el ratn, qu botn del ratn ha pulsado, etc.) y se
puede establecer un cdigo previsto a ejecutar ante determinadas circunstancias.

Una declaracin de procedimiento genrico que espera un parmetro de entrada podra ser esta:
Cdigo versiones menos recientes VB:
Private Sub Raz(Nmero As Single)

End Sub

Cdigo versiones ms recientes VB:


Private Sub Raz(ByVal Nmero As Single)

End Sub

Dentro de los parntesis se indican los parmetros de entrada requeridos, y el tipo de dato que han de
ser (de momento no prestaremos atencin a cuestiones adicionales como la aparicin de la palabra
ByVal). Si existen varios parmetros se escriben separados por comas, por ejemplo: (Nmero As Single,
Valor As Double, Nombre As String). Si no se especifica tipo de dato para los parmetros sern del tipo
por defecto (Variant en versiones menos recientes de Visual Basic u Object en las versiones ms
recientes). Nosotros siempre declararemos el tipo de los parmetros porque es una buena prctica de
programacin y no hacerlo podra dar lugar a diferentes problemas. La llamada al procedimiento podra
hacerse con una de estas sintaxis:

Call Raz(dato)

Raz dato

La diferencia entre usar una u otra forma de llamada la veremos en breve.

2006-2029 aprenderaprogramar.com

Raz (dato)

Procedimientos y funciones genricas en Visual Basic. Parmetros de entrada.

Una declaracin de funcin genrica que espera un parmetro de entrada podra ser esta:
Cdigo versiones menos recientes VB:
Private Function Raz(Nmero As Single) As Single

Cdigo versiones ms recientes VB:


Private Function Raz(ByVal Nmero As Single) As Single

End Sub

End Function

Las llamadas a funciones se realizan escribiendo el nombre de la funcin seguido de los parmetros
entre parntesis. Dado que devuelven un resultado, se pueden usar para asignar contenido a una
variable, para mostrar algo en pantalla, etc. Por ejemplo:
Resultado = Raz(dato)
Label1 = Raz(dato) Label1.Text = Raz(dato)

Ejemplos de llamadas a un mdulo genrico podran ser estas:


Cdigo versiones menos recientes VB:
'Curso VB aprenderaprogramar.com
Option Explicit
Dim Dato As Single
Dim Resultado As Single

Cdigo versiones ms recientes VB:


REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
Dim Dato As Single
Dim Resultado As Single

Private Sub Form_Load()


Call Raz(9)
Call Raz(-144)
Dato = InputBox("Introduzca nmero para
calcular raz", "Dato")
Call Raz(Dato)
End Sub

Private Sub Form1_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Text = ""
Call Raz(9)
Call Raz(-144)
Dato = InputBox("Introduzca nmero para
calcular raz", "Dato")
Call Raz(Dato)
End Sub

Private Sub Raz(Nmero As Single)


Nmero = Abs(Nmero)
Resultado = Sqr(Nmero)
Label1 = Label1 & vbCrLf & "Raz
calculada: " & Resultado
End Sub

Private Sub Raz(Nmero As Single)


Nmero = Math.Abs(Nmero)
Resultado = Math.Sqrt(Nmero)
Label1.Text = Label1.Text & vbCrLf & "Raz
calculada: " & Resultado
End Sub
End Class

Si introducimos como nmero para calcular raz 64 el programa nos mostrar: Raz calculada: 3; Raz
calculada: 12; Raz calculada: 8, donde 3 es la raz de 9, 12 es la raz de 144 (valor absoluto de -144), y 8
es la raz de 64 (nmero que hemos introducido por teclado.

2006-2029 aprenderaprogramar.com

Procedimientos y funciones genricas en Visual Basic. Parmetros de entrada.

Si tratramos de realizar una llamada del tipo Raz("Nueva York") nos aparecera un mensaje de error
como: Error 13. No coinciden los tipos. La conversin de la cadena "Nueva york" en el tipo 'Single'
no es vlida.
El mismo "objetivo" cumplido utilizando funciones lo exponemos a continuacin. Recuerda que una
funcin, adems de ejecutar un cdigo, devuelve un valor.
Cdigo versiones menos recientes VB:
'Curso VB aprenderaprogramar.com
'Programa con function
Option Explicit
Dim Dato As Single
Dim Resultado As Single
Private Sub Form_Load()
Label1 =
Mostrar(Raz(9))
Mostrar(Raz(-144))
Dato = InputBox("Introduzca nmero
para calcular raz", "Dato")
Mostrar(Raz(Dato))
End Sub
Private Function Raz(Nmero As Single)
As Single
Nmero = Abs(Nmero)
Raz = Sqr(Nmero)
End Function
Private Sub Mostrar(valor As Single)
Label1 = Label1 & vbCrLf & "Raz
calculada: " & valor
End Sub

Cdigo versiones ms recientes VB


REM Curso Visual Basic aprenderaprogramar.com
'Programa con function
Option Explicit On
Public Class Form1
Dim Dato As Single
Dim Resultado As Single
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Text = ""
Mostrar(Raz(9))
Mostrar(Raz(-144))
Dato = InputBox("Introduzca nmero para
calcular raz", "Dato")
Mostrar(Raz(Dato))
End Sub
Private Function Raz(ByVal Nmero As Single) As
Single
Nmero = Math.Abs(Nmero)
Raz = Math.Sqrt(Nmero)
Return Raz
End Function
Private Sub Mostrar(ByVal valor As Single)
Label1.Text = Label1.Text & vbCrLf & "Raz
calculada: " & valor
End Sub
End Class

Prxima entrega: CU00341A


Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la direccin siguiente:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61

2006-2029 aprenderaprogramar.com

S-ar putea să vă placă și