GARANTIR DESCONTO

Fórum Array de function. É possível? #179529

03/09/2003

0

Fala Galera!

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

Wbb

Responder

Posts

03/09/2003

Wbb

Deixe eu melhorar o texto...

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


Responder

Gostei + 0

03/09/2003

Marcelo Saviski

sim, tem como

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]


Responder

Gostei + 0

03/09/2003

Wbb

Caro Marcelo,

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


Responder

Gostei + 0

03/09/2003

Marcelo Saviski

O tipo está sijm no lugar certo.

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;



Responder

Gostei + 0

03/09/2003

Wbb

Perfeito. Funcionou.
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


Responder

Gostei + 0

03/09/2003

Marcelo Saviski

que nada, podendo ajudar :D

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


Responder

Gostei + 0

03/09/2003

Aroldo Zanela

Colega,

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;



Responder

Gostei + 0

04/09/2003

Wbb

Certo. Muito legal mesmo estas opções.

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


Responder

Gostei + 0

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

Aceitar