Flag Arguments

Flag Arguments

Que si es true, o si es false, haz esto...

·

2 min read

Una de las prácticas no recomendadas en Clean Code, de Robert C. Martin, es crear métodos o funciones que reciban un argumento de tipo bandera (Flag Argument). ¿Como es eso? Pues...

public String checkingStockAndGetMessage(long qty){
  if( qty > 0 ){
    return getMessage(false);
  }else{
    return getMessage(true);
  }
}

public String getMessage(boolean isEmpty){
  if( isEmpty ){
    return "No hay más en stock";
  }else{
    return "Quedan artículos disponibles";
  }
}

Este ejemplo es super simple, pero algo complejo de leer, tenemos una función que llamamos dos veces y sólo entregamos un argumento tipo bandera. Si nos colocamos en un caso aún más complejo, ¿qué pasaría si dentro de la condición positiva se ejecuta una serie de sentencias y no solamente retorna un mensaje?

La recomendación es separar ambas condiciones en dos métodos diferentes con nombres significativos:

public String checkingStockAndGetMessage(long qty){
  if( qty > 0 ){ 
    return withStockMessage();
  }else{
    return outOfStockMessage();
  }
}

public String outOfStockMessage(){
  return "No hay más en stock";
}

public String withStockMessage(){
  return "Quedan artículos disponibles";
}

De esta manera no violamos el principio de responsabilidad única de los principios S.O.L.I.D., pues cada método hace sólo una cosa: verificar cantidad de productos, y retornar el mensaje. Además, otorgamos mayor contexto de lo que hace nuestra función, ya que se hace más fácil de leer.

Espero que este ejemplo pueda aclarar algunos conceptos vistos en Clean Code.