Cláusulas de Guarda

Las cláusulas de guarda son un sencillo método que nos permite hacer nuestro código más leíble, más semántico y con menor nivel de…

Cláusulas de Guarda

Las cláusulas de guarda son un sencillo método que nos permite hacer nuestro código más leíble, más semántico y con menor nivel de identación.

Una buena forma de detectar estos refactors, es buscar siempre estructuras if-else que comprueben una condición para ejecutar el código principal, y en caso de no cumplirse, lanzar un error o una excepción.

Seguro que más de una vez nos hemos encontrado con un bloque de código como este:

En el método setSpeed podemos ver una construcción if-else que hace una comprobación, y en caso de pasarla, ejecuta una acción de asignar un valor. En este caso es una acción muy simple, pero podría requerir de más líneas y tendríamos un bloque de código bastante grande dentro del if y una única línea en el else, que además quedaría debajo del todo, dificultando su lectura.

Este es un caso típico que puede transformarse en una cláusula de guarda y aplicar un refactor Extract Method.

Para conseguir esto, lo primero es dar la vuelta al if, negando la condición y eliminando el else:

Aquí podemos apreciar que, ya de entrada:

  • Hemos eliminado un nivel de identación en la asignación.
  • El else ha desparecido ya que resultan innecesario, en caso de lanzar la excepción la asignación nunca se realizará.

A pesar de ello, el if sigue siendo “molesto”, así que aplicaremos el refactor de la cláusula de guarda extrayendo el if a un método privado de nuestra clase:

Como se puede ver, hemos movido el código del if a un método privado. Siguiendo los principios de Clean Code, hemos puesto el método privado justo debajo del primer método que hace uso de él.

El resultado final, a la vista queda, es un código mucho más simple, sencillo de leer y con menor nivel de identación.

Hasta pronto!