ConstructiCat Logo
CodeBust.
Browse section ▾

Introducir aserción.

Problem

Para que una porción de código funcione correctamente, ciertas condiciones o valores deben ser verdaderos.

Solution

Sustituye estas suposiciones por comprobaciones de aserción concretas.

##Example

Before
double getExpenseLimit() {
  // Debe tener o bien un límite de gasto o bien
  // un proyecto 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

Supongamos que una porción de código asume algo sobre, por ejemplo, el estado actual de un objeto o el valor de un parámetro o de una variable local. Normalmente esta suposición siempre se cumplirá, salvo en caso de error.

Haz evidentes estas suposiciones añadiendo las aserciones correspondientes. Al igual que las indicaciones de tipo en los parámetros de los métodos, estas aserciones pueden actuar como documentación viva de tu código.

Como guía para ver dónde necesita aserciones tu código, busca comentarios que describan las condiciones bajo las cuales funcionará un método determinado.

##Benefits

  • Si una suposición no es cierta y, por tanto, el código produce un resultado equivocado, es mejor detener la ejecución antes de que esto cause consecuencias fatales y corrupción de datos. Esto también significa que olvidaste escribir una prueba necesaria al idear formas de probar el programa.

##How to Refactor

Cuando veas que se da por supuesta una condición, añade una aserción para esa condición a fin de asegurarte.

Añadir la aserción no debería cambiar el comportamiento del programa.

No te excedas usando aserciones para todo en tu código. Comprueba solo las condiciones necesarias para el funcionamiento correcto del código. Si tu código funciona con normalidad incluso cuando una aserción concreta es falsa, puedes eliminarla sin riesgo.