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!
Top comments (0)