Parâmetro opcional para um método. É possível?
16/07/2004
0
Já passei por problemas com isso, então resolvi perguntar:
Tem como fazer um método que receba um parâmetro opcional, ou seja, ele pode receber 2 OU 3 parâmetros, por exemplo?
Deste modo:
procedure FazAlgo(I: Integer; S: String; [F: Float]);
de modo que fosse possível chamá-lo, por exemplo, apenas como:
FazAlgo( minhaString, meuInteger); //omissao do parametro F
Não queria construir vários construtores do método, pois, por exemplo, poderia colocar N parâmetros, dependendo da necessidade.
FazAlgo( meuInteger, minhaString1, minhaString2, minhaString3);
Eu já vi algo parecido (ou eh igual?) na manipulação de arquivos (TextFile), como:
procedure Reset(var F [: File; RecSize: Word ] ); procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );
Claro, eu fiz um teste com uma procedure e não funcionou com essa declaração
Obrigado
Paulo_amorim
Post mais votado
04/06/2020
Já passei por problemas com isso, então resolvi perguntar:
Tem como fazer um método que receba um parâmetro opcional, ou seja, ele pode receber 2 OU 3 parâmetros, por exemplo?
Deste modo:
[code:1:5c1562eb96]procedure FazAlgo(I: Integer; S: String; [F: Float&93;);[/code:1:5c1562eb96]
de modo que fosse possível chamá-lo, por exemplo, apenas como:
[code:1:5c1562eb96]FazAlgo( minhaString, meuInteger); //omissao do parametro F[/code:1:5c1562eb96]
Não queria construir vários construtores do método, pois, por exemplo, poderia colocar N parâmetros, dependendo da necessidade.
[code:1:5c1562eb96]FazAlgo( meuInteger, minhaString1, minhaString2, minhaString3);[/code:1:5c1562eb96]
Eu já vi algo parecido (ou eh igual?) na manipulação de arquivos (TextFile), como:
[code:1:5c1562eb96]procedure Reset(var F &91;: File; RecSize: Word &93; );
procedure Writeln(&91; var F: Text; &93; P1 &91;, P2, ...,Pn &93; );[/code:1:5c1562eb96]
Claro, eu fiz um teste com uma procedure e não funcionou com essa declaração
Obrigado
Olá, sei que o tópico é bem antigo e provavelmente muitas pessoas tem a mesma dúvida e podem acabar vindo até aqui, más existe uma forma de fazer exatamente o que quer porém com uma funcionalidade da POO que se chama sobrecarga de métodos, isso permite criar várias chamadas de um método com o mesmo nome porém se comportando de maneiras diferentes e com parâmetros diferentes.
Para isto basta apenas incluir o comando overload; após a declaração do seu método.
Obs: funciona tanto em procedures quanto em funções, desde que o tipo de retorno no caso de funções sejam exatamente do mesmo tipo, já parametros podem ser em quantidades e tipos diferentes e neste caso especifico o tipo do parametro passado que vai determinar qual dos métodos chamar.
Abaixo exemplo de como implementar na declaração dos metodos:
[/code]
private
function soma(n1, n2 : integer) : integer; overload;
function soma(n1, n2 : string) : integer; overload;
function soma(n1, n2, n3 : integer) : integer; overload;
espero que tenha ajudado.
Marcus Pereira
Mais Posts
16/07/2004
Vinicius2k
Bem, não sei é exatamente isso que vc precisa, se não for desculpe-me, mas vc pode omitir parametros na chamada a uma procedure/function desde que este parametro possua um valor default na declaração...
Por exemplo:
procedure MinhaProc ( S: String; N: Byte = 1); begin ... end;
Na chamada à MinhaProc eu posso omitir o parametro N pois o valor default dele é 1...
MinhaProc(´Teste´);
Espero ter ajudado...
T+
16/07/2004
Cabelo
Vc pode sim...
Eu fiz isso e funcionou..
Passe um vetor do tipo record.. como parâmetro..
Neste vetor vc declara as variáveis que deseja, de vários tipos, que passariam então a ser seus parâmetros, independente da quantidade de parâmetros..
Vc utilizaria o método setlength para implementar ele..
espero ter ajudado..
Cabelo
16/07/2004
Persist
16/07/2004
Tatuweb
procedure Reset(var F [: File; RecSize: Word ] ); procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );
Só complementando o que já foi dito vc pode criar parâmetros opcionais declarando um array e jogar os valor entre colchetes. Para ficar mais claro dê uma olhada no exemplo abaixo:
function Soma (Ns: array of DWord): DWord; var k, LenNs: Word; begin Result := 0; LenNs := Length (Ns) - 1; for k := 0 to LenNs do begin Result := Result + Ns[k]; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Caption := IntToStr (Soma ([2,4,4,12,5])); end;
A rotina acima vai somar todos os numeros tanto forem os argumentos passados.
Clique aqui para fazer login e interagir na Comunidade :)