Cuando queremos pasar un parámetro a
un procedimiento,podemos hacerlo de dos maneras. La manera habitual
de saber como se pasan los parámetros es fijarnos en el
procedimiento o función que recibe el parámetro
Imaginar una rejilla, en la que hay
celdas que contienen nuestras variables.
Cada celda es una dirección en la
memoria de nuestro ordenador, con
un contenido con valor o vacío
Por valor:
Cuando pasamos por valor una variable a
un procedimiento,no pasamos la
variable original,pasamos una copia de
esta.(No sería la celda original).
La ventaja es que si dentro del
procedimiento se cambiase el valor de la variable,al salir del procedimiento, nuestra
variable contendrá su valor inicial.
En Gambas1 y Gambas2 solo era posible
pasar parámetros por valor.
----código----
PUBLIC SUB Form_Open()
Dim sNombre AS String
sNombre=”Jose Luis”
'Llamamos al procedimiento, pasándole
como parámetro la variable sNombre
VerNombre(sNombre)
'Al salir del procedimiento ,mostramos
el valor de la variable sNombre,
'comprobando que no ha cambiado.
Message.info(“El valor del nombre
es: “ & sNombre)
End
PUBLIC SUB VerNombre(sNom AS STRING)
'Vemos su valor original.
Message.info( “El valor original del
parámetro es: “ & sNom)
'Cambiamos su valor y lo mostramos.
sNom=”Jose María”
Message.info(“El valor del parámetro
se cambia a: “ & SNom)
END
---código---
No olvidéis cambiar el tipo de
comillas al pegarlo en el editor de Gambas. ;-)
Por referencia:
Cuando pasamos un
parámetro por referencia,estamos pasando el contenido
de la celda de
memoria donde se encuentra el valor de nuestra variable.
Así que el
procedimiento no manejara una copia de nuestra variable,
sino la variable
original.
En la versión de
Gambas3 podemos usar el paso de parámetros por referencia.
Para ello, debemos
usar en la llamada al procedimiento la palabra ByRef
Y también debemos
incluirla dentro de los parámetros del procedimiento
al que llamamos.
---código---
PUBLIC SUB Form_Open()
Dim sNombre AS String
sNombre=”Jose Luis”
'Llamamos al procedimiento, pasándole
como parámetro la variable sNombre
VerNombre(ByRef sNombre)
'Al salir del procedimiento ,mostramos
el valor de la variable sNombre,
'comprobando que ha cambiado.
Message.info(“El valor del nombre
es: “ & sNombre)
End
PUBLIC SUB VerNombre(ByRef sNom AS
STRING)
'Vemos su valor original.
Message.info( “El valor original del
parámetro es: “ & sNom)
'Cambiamos su valor y lo mostramos.
sNom=”Jose María”
Message.info(“El valor del parámetro
se cambia a: “ & SNom)
END
---código---
Otro ejemplo
usando paso de parámetro por referencia.
No dividir por
cero o dará error. ;-)
---código---
'Algoritmo que
calcula el cociente y el resto de la división haciendo que estos
resultados
'sean devueltos al
algoritmo principal
Public Sub
Form_Open()
Dim dividendo,
divisor, cociente, resto As Integer
dividendo =
InputBox("Ingrese el valor del dividendo")
divisor =
InputBox("Ingrese el valor del divisor")
division(dividendo,
divisor, ByRef cociente, ByRef resto)
Message.Info("Cociente:
" & cociente & "\n" & "Resto: "
& resto)
End
'Cabecera:
division(Entrada divi,Entrada d,Salida c,Salida r)
'Precondición:
dividendo >= divisor y ambos son mayores que 0
'Postcondición:
devuelve a través de los parámetros de salida c y r, el cociente y
el resto.
Public Sub
division(divi As Integer, d As Integer, ByRef c As Integer, ByRef r
As Integer) As Integer
c = divi Div d
r = divi Mod d
End
---código---
Como veis en la función división, tenemos paso por valor y referencia.
Espero que les sea útil.
Gracias. Me fue de mucha utilidad. =)
ResponderEliminar