Você já teve a necessidade de retornar múltiplos valores numa função? normalmente a primeira idéia é criar uma procedure com parâmetros passados por referência como abaixo:
procedure GetCalculo(const Valor1, Valor2:Double; var Soma, Media:Double);
begin
Soma := Valor1 + Valor2;
Media := Soma / 2;
end;
//Testando
procedure TForm1.Button1Click(Sender: TObject);
var
Soma, Media:Double;
begin
GetCalculo(100,50,Soma,Media);
ShowMessage('Soma: '+FloatToStr(Soma)+#13+'Media: '+FloatToStr(Media));
end;
Isso funciona perfeitamente, mas veja que precisei declarar as funções que vou receber. Agora imagina se fosse 10 valores no retorno! além da procedure ficar imensa você ainda teria que declarar as variáveis que seriam passadas como referência. Uma técnica mais elegante de fazer isso é criar um record e usar esse tipo na nossa função. Veja o exemplo acima alterado.
//definindo o tipo
type
TCalculo = record
Soma,
Media:Double;
end;
Form1 = Class(TForm)
...
implemetation
function TForm1.GetCalculo(const Valor1, Valor2:Double):TCalculo;
begin
//Repare que o result agora pode receber vários resutados
Result.Soma := Valor1 + Valor2;
Result.Media := Result.Soma / 2;
end;
//Testando
procedure TForm1.Button1Click(Sender: TObject);
var
Calculo: TCalculo;
begin
Calculo := GetCalculo(100,50);
ShowMessage('Soma: '+FloatToStr(Calculo.Soma)+#13+'Media: '+FloatToStr(Calculo.Media));
end;
Com eu falei, não existe muita diferença nessa técnica com a passagem por parâmetros se considerarmos o número de parâmetros, mas com certeza numa função que retorna vários resultados, a segunda opção tornará o seu código muito mais legível e elegante. Até a próxima.
sábado, 20 de outubro de 2007
Como retornar múltiplos resultados numa função?
Postado por
Cristiano Martins Alves
às
08:18
Assinar:
Postar comentários (Atom)
Perfil
- Cristiano Martins Alves
- São Paulo, SP, Brazil
- Programador Delphi desde 2000, desenvolvendo aplicações Client/Server. Colunista da Revista ActiveDelphi Membro Fundador do DUG-SP ( www.dug-sp.com )
Blogs de Amigos
Exemplos
Search
Marcadores
- Actions (1)
- AJAX (1)
- API (2)
- Arquivos (1)
- ASP.NET (1)
- Blackfish SQL (1)
- Borcon (3)
- CodeGear (2)
- Datas (1)
- Datasnap (3)
- DBExpress (1)
- DBGrid (2)
- Delimitados (1)
- Delphi (1)
- Delphi2009 (3)
- DUG (1)
- ECO (1)
- Embarcadero (1)
- ExtractStrings (1)
- Firebird (1)
- Framework (1)
- Funcões (2)
- Herança Visual (1)
- IDE (1)
- Join (1)
- Lookup (1)
- POO (1)
- RAD Studio 2007 (1)
- RN's (1)
- SQL Server (1)
- StringList (2)
- Strings (2)
- TextFile (1)
- Tiburon (2)
- TypeLibrary (1)
- UML (1)
6 comentários:
Ow show de bola esse esquema heinn..
parabénss..
Valeu mesmo, estava quebrando a cabeça de como retornar mais de um valor de uma função e sua dica deu certinho.fiz algumas alterações e estou retornando seis valores da mesma função.
Muito bom essa função, mais 200 anos de vida p/ o delphi!!!
Boa noite,
Gostaria de saber como fazer para zera esses parametros media e soma inicializando eles como 0?
Boa noite, gostaria de saber como faço para fazer com que os parametros que foi criado soma e média, posso zera-los dentro de uma function?
Boa noite Ricardo,
basta colocar result.media := 0;
Postar um comentário