Hasta ahora hemos visto varios ejemplos de funciones, todos ellos, los parametros han sido pasado por valor, esto significa lo siguiente:
- Cuando un argumento es pasado por valor, se hace una copia del valor del argumento y se pasa a la función que es llamada.
- Los cambios a la copia no afectan el valor original de la variable que aparece en la llamada.
- Una desventaja del paso por valor es que una gran cantidad de datos es pasado y copiado, puede tomar un cantidad considerable de tiempo de ejecución y espacio de memoria.
- A este tipo de parámetros se les conoce como parámetros de “entrada”
Tenemos esta función:
-->
Public
sub
calc_area(rad as
float)
area=3.14*rad^2
return
area
end
Y la usamos en esta subrutina principal:
-->
Public
sub
Mmain()
Dim
r as
float
print
“Dame el radio:”
input
r
print
“El area del circulo es: “; calc_area(r) ;“ con un radio de “;r
End
Como ves el valor de la variable "r" no ha cambiado al usarla en la función
Otro ejemplo:
-->
Desarrollo
un programa que tenga la funcion factorial para calcular la
aproximacion de e (numero de Euler). La aproximacion se vala en la
siguiente formula:
e=1/1!+1/2!+1/3!.....+1/N!
Funcion:-->
Public
Function
fact(n As
Integer)
As
Integer
Dim
pot As
Integer
=
1
Dim
i As
Integer
For
i =
1
To
n
pot
=
pot *
i
Next
Return
pot
End
En el programa principal:-->
Dim
euler As
Integer
Dim
suma As
Float =
1
Dim
i As
Integer
Print
"Dame
la aproximacion que quieres:"
Input
euler
For
i =
1
To
euler
suma
=
suma +
1
/
fact(i)
Next
Print
"El
valor de la aproximacion es "; suma
-->
Notas
importantes:
- Para evitar ambigüedad, se recomienda no usar el mismo nombre en los argumentos pasados a una función y los correspondientes parámetros en la definición de la función.
- En la llamada a una función el tipo y número de parámetros debe coincidir con los de la definición de la función. ( a menos que tenga sean parametros opcionales, en tal caso pueden no aparecer.)
-->
Parámetros
por referencia
- Cuando un argumento es pasado por referencia, no se hace una copia del valor del argumento, sino que se esta pasando la referencia este a la función o subrutina.
- Los cambios a la copia si afectan el valor original de la variable que aparece en la llamada.
- La ventaja del paso por referencia es el menor consumo tiempo y memoria, ya que no se tiene que realizar copias de los datos.
Para
pasar un parametro por referencia, en la definición de la función, hay que usar: byref delante del parametro y ademas en la llamada a la funcion o subrutina hay que añadirle tambien byref
Ejemplo:
Funcion:
Public
Sub
titulo(ByRef
titulo As
String)
titulo
=
"**
" &
titulo &
"
**"
End
Uso de la funcion en el programa principal:
Dim
palabra As
String
'definicion
de variable de cadena
Print
"Ejemplo
de parametro por referencia"
palabra
=
"hola"
titulo(ByRef
palabra)
Print
palabra
Fijaos que en la llamada de la función también he añadido delante del parametro "palabra" la orden ByRef. En caso de no añadirla, la subrutina trataria al parametro como si fuera pasado por valor:
Resultado de la ejecución del programa:
Ejemplo de parametro por referencia
** hola **
Para descargarte los ejemplo: enlace
NOTA IMPORTANTE:
Los arrays y objetos siempre se pasan por referencia. Osea que si pasas a una función como parámetro un array de elementos integer, al modificarlo, se verá modificado el original.
Los arrays y objetos siempre se pasan por referencia. Osea que si pasas a una función como parámetro un array de elementos integer, al modificarlo, se verá modificado el original.
No hay comentarios:
Publicar un comentario