Você está na página 1de 3

Delphi Assertions

Quando voc escreve um cdigo, voc consegue AFIRMAR que seus argumentos so vlidos o suficientes para a execuo?
Pois bem, neste texto irei falar sobre Assertions, ou traduzido que significa Assertivas que se encaixam perfeitamente como Boas prticas
de programao
Mas afinal o que e do que se trata isso?

Assertivas so validaes lgicas de uma condio dada como necessria para o correto funcionamento do algoritmo.
um timo recurso a ser utilizado que pode at identificar bugs iniciais ainda no ambiente de desenvolvimento.
Seu uso recomendado apenas para verso de debug, isto , no faz sentido usar Assert como validao de regras de negcio, disparando
mensagens deste tipo para o usurio final. Para validao de regras de negcio o melhor criar testes unitrios (Assunto para prximos
posts).
Como utilizar?
Por padro, o Delphi j inicia habilitado ou desabilitado em seu projeto a configurao Assetions, conforme o Target, por exemplo:
Menu Project|
Options|
Delphi Compiler|
Compiling
Target = Debug Configuration => Debugging = True.
Target = Release Configuration => Debugging = False.

Voc ainda pode habilitar ou desabilitar no prprio cdigo fonte usando as diretivas: {$C+} e {$C-}
No Delphi Assert uma funo interna do compilador que pode ser utilizada pelo mtodo Assert.
A sintaxe do mtodo :
Assert(Condition: Boolean; [Message: string]);
O primeiro parmetro Condition a expresso a ser verificada como verdadeira.
O segundo parmetro Message opcional podendo ser utilizado para descrever a mensagem informada quando a condio no for
verdadeira.
Caso o parmetro Message no for utilizado, o Delphi ir exibir a mensagem padro Assertion failure
Vamos ver na prtica:
Exemplo 1:
function Dividir(const Divisor, Dividento: integer): Double;
begin
Assert(Divisor <> 0, Divisor deve ser diferente de Zero!);
Result := Divisor / Dividendo;
end;
Exemplo 2:
procedure AdicionarItemNaLista(const Item: String);
begin
Assert(Item <> EmptyStr, Item no contm um valor para adicionar a lista!);
Lista.Add(Item);
end;
Exemplo 3:
procedure CopiarObjeto(ObjetoOrigem,ObjetoDestino: TObject);
begin
Assert((ObjetoOrigem <> nil) and (ObjetoDestino <> nil), Os objetos Origem e Destinos devem ser criados!);

end;
procedure LimparCamposEMoverFocoParaCampoData;
begin
Assert(FormCadastro.Showing, No possvel mover o foco para o campo data, pois o FormCadastro no est sendo exibido);
Campo1.Clear;
Campo2.Clear;

EditDataCadastro.SetFocus;
end;
Alm disso, voc ainda pode customizar seus Assertions.
Sempre que um assero levantada, o Delphi executa a rotina referenciada pela varivel AssertErrorProc.
A varivel AssertErrorProc est localizada na unit System e , um ponteiro para uma funo com a seguinte assinatura:

procedure (const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);


Ento voc pode implementar seu prprio tratador de Assertivas, criando um mtodo com a mesma assinatura e atribui-lo para a varivel
global AssertErrorProc.
Exemplo:
procedure LogAssertions(const Message, Filename: string; LineNumber: integer; ErrorAddr: Pointer);
var
TextoLog: String;
begin
TextoLog := Assert : + Message + Arquivo: + Filename + Linha: + IntToStr(LineNumber);
EnviarEmailDesenvolvimento(TextoLog);
end;
Atribuio:
AssertErrorProc := LogAssertions;
Enfim, esta mais uma tcnica para que mantenha seu produto eficaz.
Bons estudos,
Carlos Delphi Clean Code

Compartilhe isso:

Você também pode gostar