Páginas

viernes, 11 de noviembre de 2011

Como hacer que una función te devuelva varios valores.


Normalmente, cuando creamos una función es para que nos devuelva un valor.



Por ejemplo, un caso típico:


PUBLIC FUNCTION raizcuadrada(x AS Float) AS Float
   RETURN Sqr(x)
 END

Cuando llamemos a esta función nos devolverá un valor float

¿pero que pasa si nos tiene que devolver dos valores?
Aquí podemos usar las clases !!!
Por ejemplo, si tenemos que devolver el punto de intersección de dos rectas, (una coordenada del eje cartesiano, que contiene dos valores, X e Y), creamos una clase que contenga esos dos propiedades: (La llamemos "coordenada")

' Gambas class file

PROPERTY x AS Float
PROPERTY y AS Float
PRIVATE hx AS Float
PRIVATE hy AS Float

PRIVATE FUNCTION x_Read() AS Float
RETURN hx
END

PRIVATE SUB x_Write(Value AS Float)
hx = value
END

PRIVATE FUNCTION y_Read() AS Float
RETURN hy
END

PRIVATE SUB y_Write(Value AS Float)
hy = value
END


Y ahora en la función:

PUBLIC FUNCTION ptointerseccion() AS coordenada
DIM pto_int AS NEW coordenada
'calculo de la interseccion
'........
'........
pto_int.x = 4.2
pto_int.y = 2.3
RETURN pto_int
END

Y para usar la función:
 
PUBLIC SUB Form_Open()
DIM pto AS NEW coordenada
pto = ptointerseccion()
PRINT "Valores:", pto.x, pto.y
END


Como podéis comprobar es muy fácil de usar, y además es ampliable a datos más complejos, simplemente aumentando la complejidad de la clase (más propiedades e incluso añadirles métodos a esas clases)

Saludos