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
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