Fórum Array de function. É possível? #179529
03/09/2003
0
Gostaria de saber se é possível criar um array de function. Algo do tipo:
function NomeDaFunction(): array[1..4] of string;
begin
{
blablabla
}
end;
Grato.
wbb
OBS.: Claro que do jeito que está neste exemplo, não funcionou.
Wbb
Curtir tópico
+ 0Posts
03/09/2003
Wbb
O que eu preciso é que ao chamar uma function, sejam retornados 4 valores, separados, que serão gerados por ela (a function).
Daí o motivo de eu pensar num array de function.
wbb
Gostei + 0
03/09/2003
Marcelo Saviski
crie um tipo
[color=green:a4aa85c8f4]type
TFunctionResult = array[0..10] of string;[/color:a4aa85c8f4]
e faça em vez de:
[color=green:a4aa85c8f4]function NomeDaFunction(): array[1..4] of string; [/color:a4aa85c8f4]
[color=green:a4aa85c8f4]function NomeDaFunction(): TFunctionResult;[/color:a4aa85c8f4]
Gostei + 0
03/09/2003
Wbb
Como nunca mexi, nem vi este tipo de função, estou com dificuldades em utilizá-la.
Vou descrever o que fiz.
1- Na seção ´type´ já existente, logo abaixo de ´uses´, declarei o novo tipo:
type TMeuTipo1 = array[1..2] of string;
2- Em seguida criei uma função para teste, do tipo que defini acima:
function MinhaFuncao1(): TMeuTipo1; begin MinhaFuncao1[1] := ´aaa´; MinhaFuncao1[2] := ´bbb´; end;
3- Para testar, criei um rotina chamadora:
procedure Tform1.Button1Click(Sender: TObject); var a, b: string; begin a := NomeDaFunction[1]; b := NomeDaFunction[2]; showmessage(a); showmessage(b); end;
O que descrevi acima, não funcionou. Ou seja, o que entendo é que, ao pressionar o Button1, deveria aparecer uma mensagem ´aaa´, e em seguida outra mensagem, ´bbb´.
Você poderia auxiliar-me a corrigir?
Mais uma coisa: O novo tipo que criei está declarado no lugar certo?
Obrigado pela atenção.
wbb
Gostei + 0
03/09/2003
Marcelo Saviski
Tente:
function MinhaFuncao1(): TMeuTipo1; begin result[1] := ´aaa´; result[2] := ´bbb´; end;
procedure Tform1.Button1Click(Sender: TObject); var r : TMeuTipo1; begin r := NomeDaFunction; showmessage(r[1]); showmessage(r[2]); end;
Gostei + 0
03/09/2003
Wbb
Obrigado.
Sem querer abusar da boa vontade, mas gostaria também de saber sua opinião sobre esta tarefa que estou criando. Ou seja, você acha que é a maneira mais eficiente?
Como eu disse lá no início, [i:cc2d9f8c5e]o que eu preciso é que, ao chamar uma function sejam retornados 4 valores, separados, que serão gerados por ela (a function). [/i:cc2d9f8c5e] E esta idéia do array de function foi a primeira que me veio à cabeça para tentar resolver este problema. Porém, com certeza tenho muito menos experiência que você em programação e por isso a pergunta.
Obrigado mais uma vez por toda a atenção.
wbb
Gostei + 0
03/09/2003
Marcelo Saviski
Você tambem poderia fazer de outros modos
tipo:
criar um registro, assim:
TFunctionResult = record Text1, Texto2, Texto3, Texto4 : string; end;
e usar assim:
function MinhaFuncao1(): TFunctionResult; begin with result do begin text1 := ´aaa´; text2 := ´bbb´; text3 := ´ccc´; text4 := ´ddd´; end; end;
procedure Tform1.Button1Click(Sender: TObject); var r : TFunctionResult; begin r := NomeDaFunction; showmessage(r.text1); showmessage(r.text2); //e assim vai end;
ou tambem poderia fazer assim:
procedure MinhaFuncao1(var Result1, Result2, Result3, Result4 : string); begin Result1 := ´aaa´; Result2 := ´bbb´; Result3 := ´ccc´; Result4 := ´ddd´; end;
procedure Tform1.Button1Click(Sender: TObject); var R1, R2, R3, R4 : string; begin NomeDaFunction(R1, R2, R3, R4); showmessage(R1); showmessage(R2); showmessage(R3); showmessage(R4); end;
e com certeza pode fazer mais outros jeitos, que não me lembrei agora
Gostei + 0
03/09/2003
Aroldo Zanela
Neste caso especificamente, também poderia ser utilizado a classe TStringList:
procedure TForm5.Button1Click(Sender: TObject);
var nI: Integer;
begin
for nI := 0 to 9 do
begin
ShowMessage(RetornaVarios[0]);
ShowMessage(RetornaVarios[1]);
end;
end;
function TForm5.RetornaVarios: TStringList;
begin
Result := TStringList.Create;
Result.Clear;
{...Faça isso e aquilo ...}
Result.Add(´X´);
Result.Add(´Y´);
end;
Gostei + 0
04/09/2003
Wbb
Vou testar todas e já deixar preparadas para uma próxima vez em que eu precisar, até para não ficar perguntando toda hora.
Muito obrigado aos dois, Marcelo Saviski e Aroldo Zanela.
Até mais.
wbb
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)