Parámetros por referencia y por valor
Tras tantos años acabo de descubrir un tema que no he visto reflejado en otros lugares, supongo que buscando un poco mas aparecerá, pero usando Q-Emulator con versión del SuperBASIC inglesa JS he probado este programa:
100 CLS 110 a=10 120 b(a) : PRINT a 130 b a : PRINT a 140 : 150 DEFine PROCedure b(c) 160 c=c+1 170 END DEFine
Si el paso de parámetros fuera siempre por valor, el resultado debían ser 10 y 10, pero el resultado es 10 y 11. Esto quiere decir que cuando llamamos a un procedimiento o función pasando los parámetros entre paréntesis pasan por valor, pero al pasarlos sin ellos lo hacen por referencia. Esto sería muy bueno si no fuera por que cuando llamamos a un procedimiento o función con mas de un parámetro, no podemos usar los paréntesis en la llamada pues da un error. Seguramente es uno de los famosos errores de la ROM del QL.
Parámetros opcionales
Otro tema que tampoco conocía y también acabo de descubrir es que se pueden usar parámetros opcionales de cierta manera, ya que mientras no los uses en tu programa no dará error:
100 CLS 110 x=5:y=5: b x :PRINT x,y 120 x=5:y=5: b x,y :PRINT x,y 130 x=7:y=5: b x :PRINT x,y 140 x=7:y=5: b x,y :PRINT x,y 150 : 160 DEFine PROCedure b(c,d) 170 c=c+1 180 IF c > 6 THEN d=d+1 190 END DEFine
Esto presentará en pantalla por la línea 110 (6,5), la 120 presenta (6,5), la 130 muestra (8,6), y al final un error de variable no definida al querer usar la línea 140.
Un descubrimiento bien curioso.
ResponderEliminar- Badaman