Receba em primeira mão o conteúdo exclusivo do Blog, além de promoções de livros e cursos de programação. Você receberá um email de confirmação. Somente depois de confirmar é que poderei lhe enviar o conteúdo exclusivo por email.

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

Padrão de Projeto: Cláusula de Guarda

Vinícius Thiengo14/09/2016, Quarta-feira, às 21h
(382) (6) (4)
Go-ahead
"Construa uma voz e uma opinião em primeiro lugar e, em seguida, se essas ressoam com o público, então você vai ter uma audiência."
Adam Carolla
Código limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas598
Comprar Livro
Conteúdo Exclusivo
Receba em primeira mão o conteúdo exclusivo do Blog, além de promoções de livros e cursos de programação.
Email inválido

Opa, blz?

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.

Tópicos presentes no 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 as aniaçõ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, muito polimorfismo e composição estratégica.

Fontes

Guard Clause.

Replace Nested Conditional with Guard Clauses.

Refatoração Para Padrões.

Padrões de Implementação.

Vlw.

Receba em primeira mão o conteúdo exclusivo do Blog, além de promoções de livros e cursos de programação.
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

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...