Cassic

Sub-Rotina com Retorno

Autor: Tadeu Pereira


  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;