Padrão de Projeto: Cláusula de Guarda

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Padrão de Projeto: Cláusula de Guarda

Padrão de Projeto: Cláusula de Guarda

Vinícius Thiengo
(1982) (2)
Go-ahead
"Seja inegavelmente bom. Nenhum esforço de marketing ou moda de mídia social pode ser um substituto para isso."
Anthony Volodkin
Kotlin Android
Capa do livro Mapas Android de Alta Qualidade - Masterização Android
TítuloMapas Android de Alta Qualidade - Masterização Android
CategoriasAndroid, Kotlin, Masterização, Especialização
AutorVinícius Thiengo
Edição
Ano2020
Capítulos11
Páginas166
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

Esse artigo é provavelmente o menor artigo sobre engenharia de software aqui no Blog, pois o padrão Cláusula de Guarda é bem simples e com uma explicação ainda mais simples.

Esse padrão é também utilizado no método de refatoração Compor Method.

Além de ser um dos poucos, ou o único, mais tranquilo de entender do que o padrão Singleton.

Antes de prosseguir, não esqueça de se inscrever na 📫 lista de e-mails do Blog para receber em primeira mão todos os conteúdos exclusivos sobre desenvolvimento e codificação limpa.

Abaixo os tópicos presentes neste artigo:

Apresentação

Com o padrão Cláusula de Guarda temos como objetivo criar rotas de saída do algoritmo de forma rápida, diminuindo o número de códigos aninhados e evitando que o código de processamento complexo (ou código principal) seja atingido quando não necessário.

O padrão proposto aqui é comumente utilizado para:

  • Checar parâmetros de entrada e retornar erro (ou algum valor padrão) quando eles não têm os valores adequados;
  • Checar o estado do objeto atual para saber se o método (ou função, para quem está no modo procedural) poderia ou não ser invocado naquele momento, caso não, retorna um erro ou qualquer outro código padrão nessa situação;
  • Checar condições triviais e então retornar rapidamente um valor correspondente.

Código de exemplo

Abaixo um exemplo de um código problemático.

Nesse código a leitura dele não é otimizada devido às aninhações e à mistura de código de retorno trivial junto a código de processamento complexo:

...
public Produto merge( Produto a, Produto b ){

Produto resultado;

if( a != null ){

if( b != null ){
/* O código complicado do merge vem aqui. */
}
else{
resultado = a;
}
}
else{
resultado = b;
}

return resultado;
}
...

 

Aplicando o padrão Cláusula de Guarda temos:

...
public Produto merge( Produto a, Produto b ){

if( a == null ){
return b;
}
if( b == null ){
return a;
}
/* O código complicado do merge vem aqui. */
}
...

 

Sério. É simples assim.

Condições triviais devem ser testadas o quanto antes e evitando códigos aninhados.

Curiosidade:

Caso não tenha achado o motivo "perda de leitura de código" forte o suficiente para a utilização desse padrão.

Tenha em mente que 90% do dinheiro e tempo investido na evolução de um projeto de software é somente para leitura e entendimento do código por parte dos programadores.

Por isso há também muitos padrões de projeto com o objetivo principal de remover código duplicado, pois, a princípio, esse é o principal problema no desenvolvimento de software.

Conclusão

Não consigo nem mesmo apresentar os pontos positivos ou negativos desse padrão.

Na verdade somente vejo pontos positivos.

De qualquer forma, se você estudar a fundo engenharia de software, muito provavelmente vai acabar por remover boa parte dos condicionais de seus códigos, utilizando no lugar:

  • Polimorfismo;
  • e Composição Estratégica.

Então é isso.

Por fim, não deixe de se inscrever na 📩 lista de e-mails do Blog para receber os conteúdos de desenvolvimento e codificação limpa exclusivos... e em primeira mão.

Abraço.

Fontes

Guard Clause

Replace Nested Conditional with Guard Clauses

Refatoração Para Padrões

Padrões de Implementação

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Padrão de Projeto: Objeto NuloPadrão de Projeto: Objeto NuloAndroid
Padrão de Projeto: SingletonPadrão de Projeto: SingletonAndroid
Padrão de Projeto: Template Method (Método Template)Padrão de Projeto: Template Method (Método Template)Android
Padrão de Projeto: Strategy (Estratégia)Padrão de Projeto: Strategy (Estratégia)Android

Compartilhar

Comentários Facebook

Comentários Blog (2)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Marcia (1) (0)
26/08/2020
Nada como um código clean, fácil de manter, de ler... enxuto! ;)

Conhecia o padrão por Object Calisthenics (Jeff Bay).

Tem um artigo que resume bem esse tipo de boas práticas: Desenvolva um código melhor com Object Calisthenics (https://medium.com/@rafaelcruz_48213/desenvolva-um-c%C3%B3digo-melhor-com-object-calisthenics-d5364767a9ba )

Dá uma olhada no item "2. Don?t Use The ELSE Keyword"

Abraço!
Responder
Vinícius Thiengo (0) (0)
27/08/2020
Marcia, tudo bem?

Obrigado pela dica.

Parece um excelente conteúdo. Certamente vou consumir.

Apesar de ter meu foco no Android, curto muito qualquer assunto relacionado a Engenharia de Software, código limpo.

Abraço.
Responder