DEV Community

Cover image for [Clean Code][PT-BR] Guards: You shall not pass!
César O. Araújo
César O. Araújo

Posted on

[Clean Code][PT-BR] Guards: You shall not pass!

Oi, gente!!!
deixa eu te perguntar uma coisa: você já sentiu a dor de ver um código como esse abaixo?

 if (email && email.includes('@')) {
   if(password && password.trim() !== '') {
     // DO SOMETHING
   }
 }
Enter fullscreen mode Exit fullscreen mode

É só um exemplo, mas imagine 4 a 7 ifs aninhados.

Criar pedaços de código assim é uma prática realmente comum pra quem tá iniciando como dev e é até saudável que façam isso porque, na minha opinião, um programador precisa sentir a dor de escrever um código sujo pra entender o valor do Clean Code.

Ifs aninhados podem realmente ser uma dor de cabeça se crescerem muito mas a gente consegue limpar usando algo chamado Guards (Guardas).

Guards?

Esse é um conceito bem simples de entender: eles basicamente verificam se existe algo errado, exemplo: validações, e então param a execução da sua função.

function usandoGuards(email, password) {
 if(!email || !email.includes('@')) {
   console.log('Email não é válido');

   return; // Aqui é onde a mágica acontece
 }

 if(password && password.trim() !== '') {
   // Faz alguma coisa
 }

}
Enter fullscreen mode Exit fullscreen mode

Como você pode ver no código acima, o primeiro if é o nosso Guard. Ele vai parar a execução se um email inválido for passado. Simples, né?!

O código ainda está sujo por causa dos níveis de abstração mas eu não vou abordar esse assunto nesse artigo. Fica pra um próximo hehehe. Vamos focar nos Guards por ora.

O conceito de Guards é uma forma simples de evitar criar ifs aninhados. Ah, você também pode ter vários Guards:

function usandoGuards(email, password) {
 if(!email || !email.includes('@')) {
   console.log('Email inválido');

   return; // that's where the magic happens
 }

 if(!password && !password.trim() === '') {
   console.log('Password inválido');

   return;
 }

 // Faz alguma coisa
}
Enter fullscreen mode Exit fullscreen mode

Agora que estamos usando nossos Guards do jeito certo, estamos livres pra escrever qualquer lógica de negócio abaixo porque, no fim, já estamos fazendo a validação com os Guards.

Uma última dica: a necessidade de usar Guards pode ser identificada de forma fácil se você tiver um if-else onde no else, você tem a saída negativa:

 if (user) {
   // Faz alguma coisa
 } else {
  console.log('esse é um erro!');
 }
Enter fullscreen mode Exit fullscreen mode

Tente fazer isso sozinho e vai ver a legibilidade do seu código aumentar!

NOTA: Todos os exemplos foram feitos com JavaScript mas você pode usar a linguagem da sua preferência pois os princípios são os mesmos.

Alguma opinião ou algo a acrescentar? esqueci de algo? não tenha medo e deixe seu comentário!

Obrigado por ler! =)

Top comments (0)