Parâmetro
A passagem de valores entre um código e uma sub-rotina é feita através de parâmetros, dessa maneira os parâmetros têm como finalidade ser uma ponte de comunicação bidirecional entre um código e uma sub-rotina.
Sintaxe:
[; Parâmetor_3: Tipo_2;
...;
Parâmetor_n: Tipo_m ] );
Parâmetro Formal e Real
Os parâmetros formais são os declarados junto com a identificação da sub-rotina e serão tratados pela mesma como variáveis, enquanto os parâmetros reais são os valores passados pelo código no momento da chamada da sub-rotina.
Passagem de Parâmetro por Valor
Os Parâmetro passados por valor a uma sub-rotina não alteram o valor real do mesmo, mas o seu valor formal pode ser manipulado pela sub-rotina.
Crie um novo projeto e configure igual ao anterior, depois vá até a seção private e declare a identificação do procedimento:
procedure Potencia(Base, Expoente: Integer);
Em seguida tecle <Ctrl+Shift+C> sobre a identificação e entre com o código em negrito:
01 |
procedure TForm1.Potencia(Base, Expoente: Integer); |
02 |
var |
03 |
 Contador, Resultado: Integer; |
04 |
begin |
05 |
 Resultado := 1; |
06 |
 for Contador := 1 to Expoente do Resultado := Resultado * Base; |
07 |
 LblResultado.Caption := 'Resultado : ' + IntToStr( Resultado ); |
08 |
end; |
Esse procedimento é semelhante ao anterior, mudando apenas a utilização dos parâmetros no lugar dos componentes SpinEdit para obter o resultado desejado. A chamada do procedimento muda um pouco como mostrado a seguir:
01 |
procedure TForm1.BtnPortencClick(Sender: TObject); |
02 |
begin |
03 |
Potencia( SEdBase.Value, SEdExpo.Value ); |
04 |
end; |
Passagem de Parâmetro por Referência
A passagem de parâmetro por referência difere da passagem por valor pela alteração do valor real sempre que o valor formal for manipulado.
A sintaxe é semelhante a anterior, mas para transformar um parâmetro passado por valor em um passado por referência basta colocar a palavra reservada var antes do parâmetro que deseja.
Para o nosso exemplo configure um novo projeto igual ao anterior e entre com a identificação do procedimento na seção private:
procedure Potencia(Base, Expoente: Integer;
var Retorno: string);
Tecle <Ctrl+Shift+C> sobre essa declaração e entre com o código:
01 |
procedure TForm1.Potencia(Base, Expoente: Integer; |
02 |
var Retorno: string); |
03 |
var |
04 |
Contador, Resultado: Integer; |
05 |
begin |
06 |
Resultado := 1; |
07 |
for Contador := 1 to Expoente do Resultado := Resultado * Base; |
08 |
Base := Resultado; |
09 |
Retorno := 'Resultado : ' + IntToStr( Base ); |
10 |
end; |
Esse procedimento recebeu um terceiro parâmetro, mas esse parâmetro foi passado por referência, ou seja, sempre que mudarmos o valor do parâmetro, o seu valor real será mudado. Entre com a chamada do procedimento OnClick do BtnPortenc:
01 |
procedure TForm1.BtnPortencClick(Sender: TObject); |
02 |
var |
03 |
Resposta: string; |
04 |
begin |
05 |
Potencia( SEdBase.Value, SEdExpo.Value, Resposta ); |
06 |
LblResultado.Caption := Resposta; |
07 |
end; |
Os dois procedimentos anteriores colocavam o resultado direto na propriedade Caption do componente LblResultado, nesse exemplo a propriedade é mudada depois da chamada do procedimento Potencia(linha 05), uma vez que a variável Resposta é passada por referência à mesma.