Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

miércoles, 22 de agosto de 2012

Paso de parametros por valor y por referencia: BYREF

Parametros por valor
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”
Ejemplo:

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.



No hay comentarios:

Publicar un comentario en la entrada

A falta de donativos... un poco de publicidad