quinta-feira, 7 de abril de 2011

Tirando um maior proveito do Exit

Olá. Estou fazendo uma higienização por aqui, tirando os warnings dos projetos. E teve um que me deixou muito encucado:

[DCC Warning] Unit2.pas(39): W1035 Return value of function 'TForm2.EntradaValida' might be undefined

Vamos ao código:

function TForm2.EntradaValida(piEntrada: Integer): Boolean;
begin
  if (piEntrada > 0) then
  begin
    {...}
    Exit;
  end;

  {...}
  Result := True;
end;

Neste exemplo o compilador reclama que o resultado da função EntradaValida não foi definido.

O compilador foi ninja o suficiente para perceber que se entrar no if..then o método será interrompido pelo comando Exit.

Desde o D2009 podemos chamar o Exit de dentro de uma função passando como parâmetro o resultado desta função. Isso elimina o warning W1035. Veja no exemplo abaixo:

function TForm2.EntradaValida(piEntrada: Integer): Boolean;
begin
  if (piEntrada > 0) then
  begin
    {...}
    Exit(False); {<-- PULO DO GATO}
  end;

  {...}
  Result := True;
end;

É isso ai.

7 comentários:

Wanc disse...

Também passei por isso, mas a solução foi diferente, tirei o EXIT :).

Gabriel disse...

Cara. Dica interessante. Não sabia dessa.

Control Fácil Sistemas disse...

normalmente eu ja defino o result da funcao pra um valor padrao no inicio da mesma, mas essa dica tb vale

Paulo disse...
Este comentário foi removido pelo autor.
Paulo disse...

Olá, gostei desta dica.
Tenho uma pergunta.
Quando a função deve retornar um tipo string, o meu compilador não emite nenhum aviso. Alguma configuração que perdi ou é o comportamento padrão.
(Delphi 2010).

renato disse...

Isso tudo não poderia ser feito assim?

Result := not (piEntrada > 0);

José Mário Silva Guedes disse...

Opa amigons. Por algum motivo só li os comentários hoje.

Wanc, boa solução.

Gabriel, obrigado.

Control Fácil, a sua abordagem é corretíssima.

Paulo, eu não tinha percebido esta situação. Acredito que o problema se manisfeste apenas com tipos ordinais.

Renato, poderia sim. O exemplo é didático e talvez tivesse mais sentido para você se fosse um Integer.

Forte abraço a todos!

Minha lista de blogs