ConstructiCat Logo
CodeBust.
Browse section ▾

Introduzir Asserção.

Problem

Para que um trecho de código funcione corretamente, certas condições ou valores precisam ser verdadeiros.

Solution

Substitua essas suposições por verificações de asserção específicas.

##Example

Before
double getExpenseLimit() {
  // Deve ter ou um limite de despesa, ou
  // um projeto principal.
  return (expenseLimit != NULL_EXPENSE) ?
    expenseLimit :
    primaryProject.getMemberExpenseLimit();
}
After
double getExpenseLimit() {
  Assert.isTrue(expenseLimit != NULL_EXPENSE || primaryProject != null);

  return (expenseLimit != NULL_EXPENSE) ?
    expenseLimit:
    primaryProject.getMemberExpenseLimit();
}

##Why Refactor

Suponha que um trecho de código presuma algo sobre, por exemplo, a condição atual de um objeto ou o valor de um parâmetro ou variável local. Normalmente, essa suposição sempre será verdadeira, exceto no caso de um erro.

Torne essas suposições óbvias adicionando asserções correspondentes. Assim como a tipagem nos parâmetros de método, essas asserções podem atuar como documentação viva do seu código.

Como guia para descobrir onde seu código precisa de asserções, procure por comentários que descrevam as condições sob as quais um determinado método funcionará.

##Benefits

  • Se uma suposição não for verdadeira e o código, por isso, produzir o resultado errado, é melhor interromper a execução antes que isso cause consequências fatais e corrupção de dados. Isso também significa que você deixou de escrever um teste necessário ao planejar as formas de testar o programa.

##How to Refactor

Quando você perceber que uma condição é presumida, adicione uma asserção para essa condição a fim de ter certeza.

Adicionar a asserção não deve alterar o comportamento do programa.

Não exagere no uso de asserções para tudo no seu código. Verifique apenas as condições que são necessárias para o funcionamento correto do código. Se o seu código estiver funcionando normalmente mesmo quando uma determinada asserção é falsa, você pode remover a asserção com segurança.