Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Una función en Delphi, puede devolver varios parámetros? (https://www.clubdelphi.com/foros/showthread.php?t=63715)

socger 27-02-2009 10:15:38

¿Una función en Delphi, puede devolver varios parámetros?
 
Hasta ahora cuando he usado una función sólo he devuelto un parámetro, cuando he tenido que devolver varios por ejemplo he declarado variables públicas y luego las he leido desde otras partes del módulo en el que estoy desarrollando.

Por ejemplo una función podría que uso muy a menudo es algo parecido a esto

function TModuloPrograma.Comprobar_Algo : ShortString;
var Mensaje_Error : ShortString
begin
Mensaje_Error := '';
try
// Cuerpo de lo que quiero hacer
Except
// Si se produce un error que quiero controlar
Mensaje_Error := 'se ha producido un error';
End;

Result := Mensaje_Error;
end;

Lo que no se es si una función puede devolver varias variables. ¿Podría amáblemente decirme alguien esto ó como lo solucionais?.

Gracias de antemano.

pjmedina 27-02-2009 10:23:06

Funcion
Código Delphi [-]
function TModuloPrograma.Comprobar_Algo(var mensaje:string;var mensaje2:string) : ShortString;
var Mensaje_Error : ShortString
begin
Mensaje_Error := '';
try
// Cuerpo de lo que quiero hacer
 mensaje:='lo que sea';
 mensaje2:='lo que sea';
Except
// Si se produce un error que quiero controlar 
Mensaje_Error := 'se ha producido un error';
mensaje:='error';
mensaje2:='error';
End;
 
Result := Mensaje_Error;
end;

UTILIZACION
Código Delphi [-]
var
 sms,sms1,sms2:string;
begin
 sms:=ModuloPrograma.Comprobar_Algo(sms1,sms2);
end;

Espero que te sirva.

Saludos.

pjmedina 27-02-2009 10:24:33

Por cierto, al igual que lo he hecho con una función, también puedo hacerlo con un procedimiento. En el ejemplo que te he puesto, despues de llamar a la funcion las tres variables (sms,sms1 y sms2) tiene el valor que le pasa la función.

DarkMan 27-02-2009 15:07:19

Aquí tienes el tema tratado anteriormente.

dec 27-02-2009 15:32:17

Hola,

Otra opción puede user utilizar "records", de modo que podríamos declarar una como este:

Código Delphi [-]
type
  TOperationResult = record
    operationResult : integer;
    operationMessage : string;
  end;

Que podríamos emplear como tipo de resultado para la siguiente función:

Código Delphi [-]
function SumOperation(a, b: integer) : TOperationResult;
begin
  Result.operationResult := (a + b);
  Result.operationMessage := Format(
    'The sum of %d and %d is %d',
    [a, b, Result.operationResult]
  );
end;

Que a su vez podríamos utilizar de este modo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(SumOperation(1, 2).operationMessage);
end;

Para obtener, en este caso, el mensaje "The sum of 1 and 2 is 3". ;)

Caro 27-02-2009 16:18:43

Hola, otra opción sería utilizar Out, que define un parametro de salida y supuestamente no necesita inicialización.

Código Delphi [-]
 function NombreFuncion(Out a , b : Integer) : Integer
 begin
   ....................
  a := valor;
  b ;= otrovalor;
 end;

Saluditos

ContraVeneno 27-02-2009 18:00:07

Otra opción sería.... naaa, creo que ya con esas son suficientes :D:D


La franja horaria es GMT +2. Ahora son las 15:55:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi