Boas práticas de programação Assert

Salve! Salve! Pessoal! Hoje vou falar Assert – Assertions. Quem está estudando para certificação ou java 1.5 / superior , em algum capitulo vai se deparar com a tecnica de assert. Mas a questão que ja vi  é: Para que serve mesmo? Parece que é igual ao comando if/else. Não consigo entender…
Bom vou buscar nesse post explicar um pouco da tecnica com base no livro Certificação Java – exame 310-055 – da kathy.

let’s go…

 A partir da vesão 1.4, o recurso de assertivas (assert) permitirão que você teste suposições durante o desenvolvimento sem o desgaste de escrever manipuladores para exceções que se supõe nunca ocorrerão, uma vez que o programa tiver saído da fase de desenvolvimento e for totalmente distribuído.

Se você não quer perder tempo ou trazer impacto ao desempenho do programa escrevendo um código de manipulação de exceções ou não deseja teste IF/else já que se chegar a condição else, significa que a lógica anterior falhou então  as assertivas permite que você teste suas suposições durante a fase de desenvolvimento.

 

Assertivas funcionam de maneira bem simples sempre que você quer ter certeza que o valor testado jamais pode vai ser falso caso contrario m erro  AssertionError (que não é possível manipular) é lançado.

assert (boolean) : string;

Entre (  ) sempre terá que ser um valor booleano e true, caso contrario uma exceção é lançada (AssertionError).

Por padrão assert vem desabilitado para desfrutar do recurso é necessário ativá-lo.

1.Compilando

javac  -source 1.5 classe.java

2.Habilita

java –ea classe

ou

java –enableAssertion minhaclss

3.Desabilita

java –de classe

ou

java –disableAssertion classe

Regras de uso Assert:

-Assertion não pode ser usado no lugar do IF

-Assertion não pode testar métodos públicos ou argumento digitado pelo usuário

-Não pode apresentar efeitos colaterais* no programa. Ou seja, o seu programa deve rodar tanto com ele habilitado ou não.

 Usar assertivas capazes de causar efeitos colaterais pode levar a alguns dos bugs mais enlouquecedores e difíceis de encontrar (Kathy Sierra, 2006)

Não é objetivo de assertivas substituir o uso IF/ELSE, tratamentos de exceções. O uso de assertivas é no ambiente de desenvolvimento (debug) e não distribuição.

Na prática:

class Asert{

      private static void setD(int z){

            boolean b=true;

            assert(z>0):” alguém alterou o valor da linha 3 “;

            assert(b=false);

            System.out.println(z);

      }

      public static void main(String args[]){

            setD(1);

      }}

………………

class Assert{

      //usando assertivas    

      public static void main(String args[]){       

            int taxajuros=4;

            assert(taxajuros==2):“algum programador mudou o valor da int taxajuros na linha 6”;

            System.out.println(true);

      }}

Agora basta compilar com assert, e ativar em tempo de execução! E verificar a essência desse recurso.

Eu mesmo tenho habito de usar assertivas, acho uma boa pratica de programação. Espero que tenham gostado e até a próxima!!

7 comentários em “Boas práticas de programação Assert”

  1. Por acaso foi falado sobre assertivas ontem na aula, mas sem aprofundamento. Este post, com os exemplos me esclareceram a vantagem das asserções para testes.

  2. Mto bom o post!
    Com os exemplos apresentados ficou bem fácil de entender a proposta do assert…

  3. Não são apenas “if diferentes”… a motivação das assertions é fornecer um mecanismo de verificação das pré- pós-condições (um mini-DbC) que pode ser desabilitado sem alterações no código.

    Sem falar que não é uma boa prática utilizar assertions para verificar o comportamento de métodos públicos!! Não esqueça que elas podem ser desativadas em runtime, e que o comportamento desse tipo de método -publicos- deve ser sempre verificado.

    []s

  4. tipo (não sei se é uma pergunda mei idiota mas…), aonde eu escrevo o codigo pra ativalas ??
    java –ea classe

    ou

    java –enableAssertion minhaclss

    vllw!!

Deixe um comentário para Laércio Queiroz Cancelar resposta

O seu endereço de e-mail não será publicado.