Função que retorna dois valores
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
É 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
Curtidas 0
Melhor post
Flávio Siebert
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;
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;
GOSTEI 3
Mais Respostas
Alanporto
20/10/2009
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:
Ex2:
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;
GOSTEI 0
Uelinton_reis
20/10/2009
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:
Ex2:
type ExemploRecord = record valor1: Integer; valor2: String [10]; end; function Exemplo1(valor1,valor2: Boolean) : ExemploRecord;
function Exemplo2(valor1: String; var retorno: Integer) : Integer;
Valeu cara....
Teria como vc dar um exemplo utilizando o retorno...
se puder agradeço...
obrigado.
GOSTEI 0
Alanporto
20/10/2009
Exemplo:
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:
nesse caso, as variáveis ficariam: retorno1 = 10 e retorno2 = 5.
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.
GOSTEI 0
Renato Rubinho
20/10/2009
Buenos,
Um meio mais simples é utilizar o retorno como variant.
Abraççç,
rrubinho
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
GOSTEI 1
Hermeson Gonçalves
20/10/2009
Muito bom!!! Funcionou Show de bola!!! =)
GOSTEI 0
Rogério Neves
20/10/2009
vou testar, show de bola com array.
GOSTEI 0
Rogério Neves
20/10/2009
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 ?
como pegaria o valor do result dentro da própria função ?
GOSTEI 0