Guard Clauses. Que son y que beneficios tienen.

Guard Clauses. Que son y que beneficios tienen.

Para explicar que son las guard clauses o clausulas de guarda y que beneficios tienen, vamos a poner primero un ejemplo de código en el cual no se usan para ver que problemas tiene y cómo las guard clauses nos pueden ayudar a solucionarlos.

public function divide(int $divider): float
{
	if ($this->getValue() > 0) {
    	if ($divider > 0) {
      		if ( $divider != 1) {
        		return $this->getValue()/$divider;
      		} else {
				return $this->getValue();
	  		}
    	} else {
			throw new Exception('División por cero.');
    	}
  	} else {
    	return 0;
  	}
}

Problemas que nos encontramos en el ejemplo

Indentación excesiva

Al tener varios IFs anidados la indentación se nos va demasiado hacia la derecha dificultando la lectura del código.

Correlación de IF con ELSE

En este ejemplo igual no es demasiado complicado, pero si cada parte del IF y/o ELSE tuviera un poco más de código, nos costaría saber que IF va con que ELSE bajando hasta la correspondiente línea.

Seguir la traza mentalmente

Tal cómo está, nos obligaría al leer la función a seguir la traza y mantener la “pila” de condiciones mentalmente. Llego a la linea 6 porque ni el valor del objeto actual es 0, el divisor es mayor que 0 y distinto de 1.

Guard clauses es la solución

public function divide(int $divider): float
{
  	if ($this->getValue() = 0) {
		return 0;
	}
	
	if ($divider == 0) {
		throw new Exception('División por cero.');
	}

	if ($divider == 1) {
		return $this->getValue();
	}

	return $this->getValue()/$divider;
}

Cómo vemos, con las guard clauses vamos comprobando primero una a una todas las condiciones que se deben cumplir antes de hacer lo que la función tiene que hacer, solucionando toso los problemas anteriores, indentación excesiva, no tenemos que saber que IF va con que ELSE, y por último y diría que más importante, no debemos mantener la “pila” de condiciones de la traza mentalmente.

Si es el valor actual del objeto es igual a 0 devuelvo 0, sinó continuo y me “olvido” de esa condición porque ya la he cumplido.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies