Fórum Função que retorna dois valores #376147

20/10/2009

0

Boa tarde a todos.

É comum criar funções que retorna sempre um valor como no exemplo a seguir:

function (cdPrd, descPrd : string) : string;

Mas agora preciso criar um função que retorna dois valores.

Alguém poderia me ajudar?

Obrigado.

Uelinton


Uelinton_reis

Uelinton_reis

Responder

Post mais votado

13/01/2015

Uelinton_reis, você pode ter a quantidade de retornos que desejar, para isto basta usar um "record" como retorno.
Exemplo:

----------------
1 - Crie um type, após o "uses":

Type
TVariosRetornos = record
nome : String; //defina quantos quais os retornos vc quer e qual o tipo de cada um.
idade : Integer;
sexo : String;
end;
--------------

2 - Na declaração da função, utilize este record como sendo o retorno;

function DadosCliente(codigo:Integer):TVariosRetornos;

--------------

3 - Na linha da função, dê o retorno para cada um:

function DadosCliente(codigo:Integer):TVariosRetornos;
begin
case codigo of
1: begin
Result.nome := 'José da Silva';
Result.idade := 45;
Result.sexo := 'Masculino';
end;
2: begin
Result.nome := 'Maria Aparecida';
Result.idade := 33;
Result.sexo := 'Feminino';
end;
end;
end;

--------------
4 - Na chamada, declare o retorno como sendo do mesmo tipo que vc criou:

procedure Tform1.Button1Click(Sender: TObject);
var Resultado: TVariosRetornos;
begin
Resultado := DadosCliente(1);
Showmessage('Nome do cliente = '+ Resultado.nome + #13 +
'Idade = '+ IntToStr(Resultado.idade) + #13 +
'Sexo = '+ Resultado.sexo);

Resultado := DadosCliente(2);
Showmessage('Nome do cliente = '+ Resultado.nome + #13 +
'Idade = '+ IntToStr(Resultado.idade) + #13 +
'Sexo = '+ Resultado.sexo);

end;

Flávio Siebert

Flávio Siebert
Responder

Gostei + 3

Mais Posts

20/10/2009

Alanporto

sempre quando preciso de algo assim uso um dos dois métodos: ou crio um record de dois valores e a função com ele de retorno ou passo valores por referência para a função.

Ex1:
type ExemploRecord = record
  valor1: Integer;
  valor2: String [10];
end;

function Exemplo1(valor1,valor2: Boolean) : ExemploRecord;


Ex2:
function Exemplo2(valor1: String; var retorno: Integer) : Integer;



Responder

Gostei + 0

20/10/2009

Uelinton_reis

sempre quando preciso de algo assim uso um dos dois métodos: ou crio um record de dois valores e a função com ele de retorno ou passo valores por referência para a função. Ex1:
type ExemploRecord = record
  valor1: Integer;
  valor2: String [10];
end;

function Exemplo1(valor1,valor2: Boolean) : ExemploRecord;
Ex2:
function Exemplo2(valor1: String; var retorno: Integer) : Integer;


Valeu cara....
Teria como vc dar um exemplo utilizando o retorno...
se puder agradeço...

obrigado.


Responder

Gostei + 0

21/10/2009

Alanporto

Exemplo:

function Retorna2Valores(var valor2: Integer): Integer;
begin
  valor2 := 5;
  Result := 10; 
end;


essa função sempre vai retornar 10 para o Resultado da função,e a variável valor2 passada por referência recebe 5. Assim:

var
  retorno1, retorno2: Integer
begin
  retorno1 := Retorna2Valores(retorno2);
end;


nesse caso, as variáveis ficariam: retorno1 = 10 e retorno2 = 5.


Responder

Gostei + 0

14/01/2015

Renato Rubinho

Buenos,

Um meio mais simples é utilizar o retorno como variant.

function RetornaVariant: variant;
begin
  // Passa o result com VarArrayOf agrupando os retornos
  Result := VarArrayOf(['1',2]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  vAux1: variant;
begin
  // Recebe o retorno numa variável variant
  vAux1 := RetornaVariant;

  // Utiliza os valores pelo índice do VarArrayOf
  ShowMessage(vAux1[0] + ' ' + IntToStr(vAux1[1]));
end;


Abraççç,
rrubinho
Responder

Gostei + 1

22/07/2016

Hermeson Gonçalves

Muito bom!!! Funcionou Show de bola!!! =)
Responder

Gostei + 0

03/12/2017

Rogério Neves

vou testar, show de bola com array.
Responder

Gostei + 0

03/12/2017

Rogério Neves

e como ficaria para usar o result dentro da própria função ?

como pegaria o valor do result dentro da própria função ?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar