Assertions, pra que servem realmente?

5 respostas
G

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 ); } }

Desde já agradeço;

Gregori Maus

5 Respostas

T

Eu prefiro pensar como se fosse o compilador. O compilador pega esta construção:

assert y != 0: "Dividendo igual a zero!";

e a converte para:

if (!$assertionsDisabled) {
        if (! (y != 0) ) {
            throw new AssertionError ("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

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 :slight_smile:

G

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.

abraços!!!

Criado 8 de junho de 2009
Ultima resposta 8 de jun. de 2009
Respostas 5
Participantes 4