ClipaTec Informática

Receba novidades por e-mail. Digite seu e-mail abaixo e clique no botão "Cadastrar"

Delivered by FeedBurner

8 de janeiro de 2018

Delphi: Procedimento Exit()

exit delphi
Olá clipatequeiros. Falaremos neste artigo acerca do procedimento Exit(), muito conhecido pela maioria dos programadores Delphi.
O procedimento Exit() nos fornece uma usabilidade interessante. Qual a sua função?
Objetivamente falando, sua função é sair do método atual, ou seja, ele sai imediatamente do método atual, porém, o método de chamada continua. Como assim?
Imagine que você tenha dois métodos, onde o método A chama o método B. O método B realiza algumas validações, e dependendo do resultado destas validações, ele sai do método através do comando Exit, contudo, as instruções do método A continuarão sendo executadas. Para facilitar o seu entendimento, criamos um exemplo bem tosco, porém, vai te ajudar a compreender melhor o que estamos dizendo.
Crie um novo projeto, salve com o nome "ExemploExit", e o formulário principal como "FrmPrincipal". Declare na seção Private deste formulário um método chamado "Contar":

private
    procedure Contar;

Implemente-o da seguinte maneira:

procedure TFrmPrincipal.Contar;
begin
  ShowMessage('1');
  Exit;
  ShowMessage('2');
end;

Agora, adicione um "TButton" no formulário com o "name btnContar" e implemente o evento "OnClick" da seguinte maneira:

procedure TFrmPrincipal.btnContarClick(Sender: TObject);
begin
  ShowMessage('0');
  Contar;
  ShowMessage('3');
end;

Note que no evento Click do botão que implementamos, exibimos uma mensagem com o número "zero", após isso chamamos o método "Contar", cuja implementação exibe uma mensagem com o número "um", porém, dentro deste método "Contar" note que chamamos o procedimento Exit(), desta maneira, ele sairá do método atual (Contar), ignorando a mensagem com o número "dois", e seguirá executando o método Click do botão, exibindo a mensagem com o número "três", se executarmos este exemplo, você vai perceber que as mensagens com os número "zero", "um" e "três" serão exibidas, apenas a com o número "dois" não foi exibida, porque nós saímos do método "Contar" evitando sua continuidade. O exemplo é bem tosco mesmo, porém, temos certeza de que você conseguiu compreender a introdução deste artigo. Caso ainda tenha dúvidas, deixe seu comentário no final deste artigo.
Fazendo uma rápida retrospectiva no que aprendemos até aqui, o procedimento Exit(), sai do método atual e continua executando o método chamador.
Okay, agora precisamos ressaltar um comportamento muito importante acerca do procedimento "Exit()". Existe uma exceção, na qual, mesmo chamando o procedimento "Exit()", o método continua em execução. Qual é esta exceção? Quando usamos o bloco de finalização: "Try...Finally".
Ao utilizar o "Try...Finally", ainda que o procedimento Exit() seja chamado, tudo o que estiver implementado dentro do bloco "Finally" será executado mesmo assim. Para entendermos este exemplo, declare na seção "Private" do formulário principal o procedimento "TotalVenda":

private
    procedure TotalVenda;

Implemente-o da seguinte maneira:

procedure TFrmPrincipal.TotalVenda;
begin
  try
    if StrToFloatDef(edtTotal.Text, 0) < 1 then
      Exit;
  finally
    ShowMessage('Total venda: ' + edtTotal.Text);
  end;
end;

Agora adicione mais um "TButton" com o "name btnTotal" e implemente o evento "OnClick" dele desta forma:

procedure TFrmPrincipal.btnTotalClick(Sender: TObject);
begin
  TotalVenda;
end;

Adicione um componente TLabeledEdit com o name edtTotal.
Note que no procedimento "TotalVenda", simplesmente verificamos se o total da venda que está digitada dentro do "edtTotal" é menor que "um", caso esta condição seja verdade, simplesmente saímos do procedimento, mas, se você executar este exemplo, digitar um valor menor que "um" no "edtTotal" como "-1" ou "0" e clicar no botão "btnTotal", você vai perceber que embora este valor satisfaça a condição implementada dentro do método "TotalVenda", chamando o procedimento "Exit()", ele vai exibir mesmo assim a mensagem que está dentro do bloco "Finally", ou seja, mesmo chamando o procedimento "Exit()", antes de sair do método, os comandos do bloco "Finally" foram executados. Então, esta é a única exceção, em que o procedimento "Exit()", não sai do escopo do método, porque o bloco "Finally" garante que independente do que aconteça dentro de um método, seu conteúdo sempre será executado.
Legal, agora, vejamos uma situação onde, dentro de um método, verificamos uma condição, se for verdadeira, sairemos do escopo do método, caso contrário, prosseguiremos com a execução do mesmo. Isso é útil por exemplo, na seguinte situação: imagina que você precisa enviar um email para um cliente, então, antes de tudo, você verifica se o email foi informado, caso não foi, saímos do método de envio de email, senão, continuamos com a execução do método. Simples não?
Agora vamos a um exemplo prático, lembrando que todos os exemplos demonstrado neste artigo são todos simples e toscos, a finalidade é apenas entendermos de maneira simples.
Declare na seção "Private" do formulário principal os seguintes métodos:

  private
    function SomarNumerosInteiros(iNum1, iNum2: Integer): Integer;
    procedure ExibirTotal;

Implemente-os da seguinte maneira:

procedure TFrmPrincipal.ExibirTotal;
var
  iResultado: Integer;
begin
  iResultado := SomarNumerosInteiros(StrToInt(edtNum1.Text), StrToInt(edtNum2.Text));
  if iResultado < 10 then
    Exit;
  ShowMessage(IntToStr(iResultado));
end;


function TFrmPrincipal.SomarNumerosInteiros(iNum1, iNum2: Integer): Integer;
begin
  Result := iNum1 + iNum2;
end;

Agora adicione no formulário um "TButton" com o "name btnSomar", e dois "TLabeledEdit" com os "names edtNum1 e edtNum2" respectivamente.
No evento "OnClick" do "btnSomar", realize a seguinte implementação:

procedure TFrmPrincipal.btnSomarClick(Sender: TObject);
begin
  ExibirTotal;
end;

O método "SomarNumerosInteiros" simplesmente realiza a soma de dois números inteiros passados por parâmetro e devolve o resultado desta soma.
Já o método "ExibirTotal", apenas lê o resultado da soma realizada pelo método "SomarNumerosInteiros" e verifica se o mesmo é menor que "dez", caso esta condição seja satisfeita, o procedimento "Exit()" é invocado e saímos do método, caso contrário, seguimos a execução do método, exibindo o resultado desta soma em uma mensagem. Simples, porém, objetivo. Rode o exemplo e teste. 😉
Muito bem, por último, deixamos a cereja do bolo, esta dica, muitos não conhecem, embora trabalhem com o procedimento "Exit()" no seu dia a dia.
O procedimento "Exit()", possui um parâmetro que pode ser usado como retorno do método atual. É isso mesmo, este parâmetro sempre vai ser do mesmo tipo do retorno do método. Para vermos na prática como funciona, declare na seção Private do formulário principal, os seguintes métodos:

private
    function TamanhoSenha(sSenha: string): string;
    procedure ValidarSenha;

implemente-os da seguinte maneira:

function TFrmPrincipal.TamanhoSenha(sSenha: string): string;
begin
  if Length(sSenha) < 4 then
    Exit('A senha deve ter pelo menos quatro caracteres.');
  Result := sSenha;
end;


procedure TFrmPrincipal.ValidarSenha;
begin
  ShowMessage(TamanhoSenha(edtSenha.Text));
end;

Adicione no formulário um "TButton" com o "name btnValidar", e um "TLabeledEdit" com o "name edtSenha".
No evento "OnClick" do "btnValidar", chame o método "ValidarSenha":

procedure TFrmPrincipal.btnValidarClick(Sender: TObject);
begin
  ValidarSenha;
end;

O método "ValidarSenha" exibe uma mensagem com a senha digitada no "edtSenha", porém, antes disso, ele repassa esta senha para o método "TamanhoSenha" que irá verificar se a senha possui pelo menos quatro caracteres. Caso a senha possui menos que quatro caracteres, uma mensagem será exibida dizendo ao usuário que a senha precisa ter pelo menos quatro caracteres, caso contrário, a senha será exibida na mensagem apenas.
A dica está dentro do método "TamanhoSenha". Note que, se a senha for menor que quatro, o retorno da função não está sendo repassado através da variável padrão "Result", e sim, pelo procedimento "Exit()", ou seja, o procedimento é chamado, ele sai da função já retornando o que foi passado por parâmetro na chamada dele. Ele se comporta ao mesmo tempo como a variável padrão "Result", por este motivo, o conteúdo passado no parâmetro do "Exit()" deve ser do mesmo tipo do retorno da função que o chamou.
Show de bola, e assim chegamos ao final deste artigo. Deixe seu comentário caso tenha dúvida, ou feedback. Um grande abraço e até a próxima.

procedimento exit delphi


(Por ClipaTec Informática)

0 comentários:

Postar um comentário

Visite nossa página de Política de comentarios antes de comentar para ter certeza de que seu comentário não será excluído! Lembre-se, assim que aprovarmos o teu comentário ele será publicado, por isso, não deixe de sempre visitar nosso blog e conferir nossa resposta ao seu comentário, abraço!