O comando assert foi inserido ao mundo Java a partir da versão 1.4 com
o objetivo de facilitar testes que envolvem exceções, onde o uso das
condições corriqueiras if/else e switch/case não seriam de boa prática.
Não entendi nada!
É o seguinte: imagine que você estivesse criando um aplicativo
qualquer onde em determinado momento, você queira realizar um teste da
lógica.
SE ocorrer alguma coisa
Beleza, tudo tá funcionando direitinho!
SENÃO
throw new Exception( "Puxa vida!" );
Isso é uma prática comum no desenvolvimento. Várias e várias vezes os
programadores precisam declarar códigos lógicos para verificar a própria
lógica da aplicação. Imagine um comando que pudesse disparar Exceptions
em casos de falhas na lógica somente em tempo de desenvolvimento? Esse
comando existe, e se chama assert.
Com o comando assert, é possível verificar a lógica de uma condição.
Se a condição for verdadeira, nada acontece. Se for falsa, o comando
automaticamente dispara um AssertionError. Vamos a um exemplo:
public class Test {
public void regra() {
System.out.println( "Executa algo" );
boolean condicao = false;
assert condicao;
System.out.println( "Executa algo" );
}
public static void main(String args[]) {
Test test = new Test();
test.regra();
}
}
Neste caso, quando o programa for executado, como condicao é false,
uma AssertionError (que não pode ser manipulada) é lançada.
Como saída, este programa teria:
Executa algo
Exception in thread "main" java.lang.AssertionError
at Test.regra(Test.java:6)
at Test.main(Test.java:12)
Exception in thread "main" java.lang.AssertionError
at Test.regra(Test.java:6)
at Test.main(Test.java:12)
Observe que a execução termina antes do segundo System.out.print, pois a assert dispara o erro.
Este é um exemplo simples, onde a AssertionError vem sem descrição do
problema. Uma alternativa ao comando seria definir, após a condição,
algum objeto ou método que formaria a descrição do problema. Veja o
exemplo:
public class Test {
public void regra() {
System.out.println( "Executa algo" );
boolean condicao = false;
assert condicao : "Alguma coisa está errada aqui!";
System.out.println( "Executa algo" );
}
public static void main(String args[]) {
Test test = new Test();
test.regra();
}
}
Neste caso, a AssertionError gerada mostraria o texto definido após os : (dois pontos). A saída seria:
Executa algo
Exception in thread "main" java.lang.AssertionError: Alguma coisa está errada aqui!
at Test.regra(Test.java:6)
at Test.main(Test.java:12)
Exception in thread "main" java.lang.AssertionError: Alguma coisa está errada aqui!
at Test.regra(Test.java:6)
at Test.main(Test.java:12)
Mas espera ai! Como eu vou definir que este código só será aceito em tempo de desenvolvimento?
Boa pergunta. Para ativar a Assertion você precisa executar dois passos:
Passo 1: compilar o código com a tag "-source 1.4" para evitar erros de compatibilidade. Exemplo:
javac -source 1.4 Test.java
Passo 2: Habilitar os comandos assert na execução do bytecode com a
tag "-ea" (ou com sua irmã maior "-enableAssertion"). Exemplo:
java -ea Test
Muito cuidado!
Atenção! Nunca use este comando com substituto do IF/ELSE. Ele é para
ser usado em desenvolvimento e portanto não poderá causar diferenças na
lógica do programa. Ele também não pode ser usado para testes de entrada
de dados. Sua utilização é para testes na lógica. Portanto, use com
moderação...
Referências:
Espero ter ajudado!
Guilherme Pontes
Nenhum comentário:
Postar um comentário