Páginas

lunes, 14 de septiembre de 2015

Gambas: Funciones que devuelven varios tipos de datos




Gambas: Funciones que devuelven varios tipos de datos




En programación, una función es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra función o procedimiento. Una función puede llamarse múltiples veces e incluso llamarse a sí misma (función recurrente).
Las funciones pueden recibir datos desde afuera al ser llamadas a través de los parámetros y deben entregar un resultado.
Se diferencian de los procedimientos porque estos no devuelven un resultado.
Definición de función:

[ FAST ] [ STATIC ] { PUBLIC | PRIVATE } { FUNCTION | PROCEDURE | SUB }
Identifier ( [ [ BYREF ] Parameter AS Datatype [ , ... ] ] [ , ]
[ OPTIONAL [ BYREF ] Optional Parameter AS Datatype [ , ... ] ] [ , ] [ ... ]
) AS Datatype ...
END 

Ejemplo de función típica:

public function dividir(a as integer, b as integer) as single 'esta función divide a/b y devuelve el resultado.
return  a/b
end


Uso de esta función:
...
dim resultado as single
....
resultado=dividir(1345,2)
print "resultado de la división: ",resultado
...

Funciones que devuelven varios tipos de datos a la vez:
Podemos hacer que en vez de devolver un solo tipo de datos devuelva más información,por ejemplo, si la función ha podido realizar su trabajo correctamente que devuelva TRUE (verdadero) y el resultado, y si no ha podido realizar el trabajo (por ejemplo ha dividido entre cero), devuelva esta información FALSE

Para ello lo que tenemos que decir el que el tipo de dato que devuelva, sea tipo Variant[], que es un array de cualquier tipo de dato, el primer dato puede ser True o False, y el segundo seria el resultado de la operacion


public function dividir(a as integer, b as integer) as variant[]
if b=0 then
 return [false,0]'devuelve que no ha podido realizar la operación
else
return [true,a/b] 'operación realizada con exito, devuelve el resultado.
endif
end


Para la lectura de la informacion donde estemos usando esta función se haría del siguiente modo:
....
Dim resultado as variant[]
...
...
resultado=dividir(123,3)
...
if resultado[0]=true then
print "Resultado de la división es...";resultado[1]
end
if resultado[]=false then
print "No he podido dividir, ya que el divisor es 0"
endif
....






Enlaces:
http://gambaswiki.org/wiki/lang/function
http://gambaswiki.org/wiki/lang/methoddecl