olá, minha dúvida é em relação aos Assertions. Vi em posts anteriores como funciona e sua sintaxe, mas ainda ñ compreendi na prática o que ele realmente faz. Neste exemplo abaixo, o que realmente a função está fazendo? E por que aquela frase [color=green]“Dividendo igual a zero!”[/color]? Quando ela aparece?
public class Calculadora {
public static void main ( String[] args ) {
Calculadora c = new Calculadora();
System.out.println( c.divide( 10, 2 ) );
System.out.println( c.divide( 10, 0 ) );
}
public float divide( float x, float y ) {
assert y != 0: "Dividendo igual a zero!";
return ( x / y );
}
}
Eu prefiro pensar como se fosse o compilador. O compilador pega esta construção:
asserty!=0:"Dividendo igual a zero!";
e a converte para:
if(!$assertionsDisabled){
if(!(y!=0)){
thrownewAssertionError("Dividendo igual a zero!");}
}
onde $assertionsDisabled é um campo estático da classe (gerado pelo compilador, e invisível para o programador) que normalmente é true, mas é setado para false se você passar o comando “-enableassertions” para o java.exe na hora de você rodar o programa.
T
thingol
A idéia de “assertions” é pegar erros do tipo “tal parâmetro nunca deveria ter o valor X; entretanto, vamos checar se isso é verdade mesmo.” Isso é importante para ver se as peças do seu programa estão corretamente ajustadas umas nas outras (não adianta só testar cada peça individualmente).
ebortolatto
Bom dia.
Olha, não conheço profundamente sobre Assertions, mas pelo que eu li, vc assegura que algo seja verdadeiro. Caso não seja, irá lançar um erro/exceção com aquela mensagem.
Nesse caso, vc está assegurando que o y não deve ser 0. Caso seja 0, irá lançar um erro/exceção informando que o dividendo é igual a 0.
Bom, é isso, me corrijam se eu estiver errado
G
Gregori
Obrigado pela ajuda, agora ficou mais fácil de entender.
mcbarsotti
lembrando que as assertions vem desativadas por default na vm, para ativalas vc deve usar a flag -ea ou -enableassertions.