Sub-Rotina com Retorno
As sub-rotinas que necessitam de um controle de retorno após sua conclusão são chamadas de função:
Sintaxe:
function Nome_Sub_Rotina( [Parâmero_1, Parâmetor_2: Tipo_1;
...;
Parâmetor_n: Tipo_m] ): Tipo_Retorno;
Configure um novo projeto igual ao anterior e entre com a identificação do procedimento na seção private:
function Potencia(Base, Expoente: Integer;
var Retorno: string): Boolean;
Tecle <Ctrl+Shift+C> sobre essa declaração e entre com o código:
01 |
function TForm1.Potencia(Base, Expoente: Integer; |
02 |
var Retorno: string): Boolean; |
03 |
var |
04 |
Contador, Resultado: Integer; |
05 |
begin |
06 |
Result := True; |
07 |
if ( Expoente < 0 ) then |
08 |
begin |
09 |
MessageDlg('Função não preparada para calcular ' + |
10 |
'Base com Expoente negativo', mtError, [mbOk], 0); |
11 |
Result := False; |
12 |
Exit; |
13 |
end; |
14 |
Resultado := 1; |
15 |
for Contador := 1 to Expoente do Resultado := Resultado * Base; |
16 |
Base := Resultado; |
17 |
Retorno := 'Resultado : ' + IntToStr( Base ); |
18 |
end; |
Essa função tem um retorno do tipo Boolean, seu valor de retorno é iniciado na linha 06, no caso do parâmetro Expoente ter um número negativo é mostrado a mensagem da linha 09, a linha 11 muda o retorno da função e a linha 12 abandonar a função sem executar o que tem abaixo (linhas 14 à 17) que é semelhante ao ultimo procedimento. Entre com o código em negrito no evento OnClick do BtnPortenc:
01 |
procedure TForm1.BtnPortencClick(Sender: TObject); |
02 |
var |
03 |
Resposta: string; |
04 |
begin |
05 |
if ( Potencia( SEdBase.Value, SEdExpo.Value, Resposta ) ) |
06 |
then LblResultado.Caption := Resposta |
07 |
else LblResultado.Caption := 'Tente novamente'; |
08 |
end; |