Como foi introduzido no post anterior, as declarações ou assertivas são utilizadas para verificar a validade de um programa quanto a falhas de lógica de programação e bugs. A instrução
assert
é utilizada para fazer a validação das declarações e não modificar o código após a verificação. Para que a instrução assert
seja vericada durante a execução do código é necessária a habilitação da opção. Para executar o programa com assertivas digite: java -ea <NomeDaClasse>
. A instrução assert
avalia uma expressão boolean e determina se é verdadeira ou falsa.Sintaxe da instrução assert
assert <expressão_booleana>;
assert <expressão_booleana> : <expressão_de_detalhes>;
A primeira forma da sintaxe da instrução
assert
avalia a expressão booleana e lança um AssertionException
se a mesma for false
. A segunda forma da sintaxe avalia a expressão booleana e lança um AssertionExeption
com a expressão de detalhes como a mensagem de erro se a expressão booleana for false
.Uso adequado de declarações
Utilizar declarações para documentar e validar a lógica interna de um único método:
- Invariante interno
if (x > 0) {
// Faz uma coisa
} else {
assert ( x == 0 );
// Faz outra coisa, a não ser que x seja negativo
}
switch (naipe) {
case Naipe.PAUS: // ...
break;
case Naipe.OUROS: // ...
break;
case Naipe.COPAS: // ...
break;
case Naipe.ESPADAS: // ...
break;
default: assert false : "Naipe indeterminado!!";
break;
}
Uso inadequado de declarações
public Object pop() {
int size = this.getElementCount();
if (size == 0) {
throw new RuntimeException("Tentativa de retirar elemento de uma pilha vazia!");
}
Object result = /* Código para recuperar o elemento retirado */ ;
// testa a pós condição
assert (this.getElementCount() == size - 1);
return result;
}
- Não utilize declarações para verificar os parâmetros de um método público. Bem como para validar parâmetros da linha de comando.
public void fazAlgo(int x) {
assert (x > 0); // INAPROPRIADO!!
// faz coisas com x
}
Como você não possui controle dos códigos que fazem chamada a um método público não é recomendado fazer a verificação dos parâmetros recebidos de um método público, pois a instrução assert pode ser desativada e sua verificação não mais será realizada. Ao invés de usar
assert
, utilize exceções!
public void fazAlgumaCoisa() {
assert (modificaAlgo());
// ...
}
public boolean modificaAlgo() {
y = x++;//Mudança no valor de variável
return true;
}
Não é recomendado utilizar declarações que possam desencadear efeitos colaterais, pois a regra geral da utilização da instrução assert é de testar algo e deixar o código exatamente como antes do teste. Instruções assert nem sempre ocorrem, assim é impossível manter o controle do código se a instrução produzir efeistos colaterais.
Nenhum comentário:
Postar um comentário