Skip to content
Desenvolvedor trabalhando em um código com práticas de Clean Code

Conceitos isolados do Clean Code: Formatação Vertical e Horizontal do código.

” Honestidade em pequenas coisas não é uma coisa pequena” 

Introdução 

A frase citada logo acima está no prefácio de um dos livros mais difundidos no meio técnico do desenvolvimento de software. O livro do Clean Code foi escrito por Robert C. Martin (conhecido como Tio Bob) e reúne boas práticas recomendadas para serem utilizadas por programadores honestos, que mensuram a qualidade de um software não apenas pela correta execução das funcionalidades propostas, mas também pela forma como o sistema foi construído. A ideia com esse material é destacar a importância do código limpo e explorar alguns pontos relevantes que poderão melhorar a nossa habilidade artística de codificação! 

Entendendo o Clean Code 

Antes de avançarmos para os conceitos técnicos, é importante ter a certeza de que realmente conseguimos assimilar “que parada é essa”. Por favor, não limite o Clean Code a um livro. A proposta do Clean Code é ser muito mais do que isso: é uma filosofia que exige comprometimento de utilização por quem a defende. Em troca, ela devolve um código com a legibilidade necessária para facilitar o trabalho em equipe e o processo de manutenção (e uma série de outros benefícios). 

Talvez a importância de nos preocuparmos em construir códigos limpos esteja no entendimento trazido pelo próprio Robert Martin: “(…) o código é a linguagem na qual expressamos os nossos requisitos “. Sendo assim, como os requisitos funcionais e não-funcionais de uma aplicação revelam o que o sistema precisa fazer (e como deve ser feito), expressar isso em linhas de códigos torna-se uma atividade de grande responsabilidade. Afinal, o sucesso de uma aplicação depende , entre outros fatores, da atividade de codificação. 

Logo, construir códigos limpos farão com que esses requisitos sejam expressos de forma mais universal, padronizada de acordo com as boas práticas e não baseando-se em achismos e vícios de programação cultivadas pelo autor inicial do código.  

A longo prazo, as vantagens poderão ser vista nas etapas de manutenção do sistema, em que ao invés dos programadores gastarem dispendioso tempo para tentarem “traduzir” e compreender a lógica utilizada pelo programador anterior (ou até por eles mesmos), alocarão as energias exclusivamente na correção e/ou na adição de novas features. 

Formatação Vertical 

A formatação é o primeiro aspecto que um programador repara ao se deparar com um código novo. Mesmo que ele não conheça a linguagem utilizada, muitas das vezes um código bem formatado vale mais do que mil palavras. Ele poderá deslizar sobre o arquivo fonte e entender quais são as variáveis, os métodos da classe e a ordem de execução das funcionalidades. Por esse motivo é importante nos atentarmos aos detalhes dessa escrita, visto que esse é um dos pontos principais para trazer legibilidade ao código. 

A formatação vertical está relacionada ao tamanho vertical do seu código, e a ordem dos elementos. Para uma maior clareza, vejamos uma citação do Robert Martin, conhecida como a metáfora do jornal: 

A metáfora do jornal

Pense em um artigo de jornal bem redigido. Você o lê verticalmente. No topo você espera ver uma manchete que lhe diz do que se trata a estória e lhe permite decidir se deseja ou não ler. O primeiro parágrafo apresenta uma sinopse da estória toda, omitindo todos os detalhes, falando de uma maneira mais geral. Ao prosseguir a leitura, verticalmente, vão surgindo mais detalhes até que datas, nomes, citações, alegações e outras minúcias sejam apresentadas. 

Desejamos que um código fonte seja como um artigo de jornal. O nome deve ser simples mas descritivo. O nome em si deve ser o suficiente para nos dizer se estamos no módulo certo ou não. As partes mais superiores do código-fonte devem oferecer os conceitos e algoritmos de alto nível. Os detalhes devem ir surgindo conforme se move para baixo, até encontrarmos os detalhes e as funções de baixo nível no código-fonte. 

O trecho finaliza dizendo: “Um jornal é composto de muitos artigos: a maioria é bastante pequena. Alguns são um pouco maiores. Muito poucos possuem textos que preencham a página toda. Isso torna o jornal aproveitável. Se ele fosse apenas uma estória extensa com uma aglomeração desorganizada de fatos, datas e nomes, nós simplesmente não o leríamos.” 

Independente da organização do documento, é fato que a maioria de nós não lemos jornais impressos, mas conseguimos facilmente entender a analogia que a estrutura desse artefato tenha com um código fonte. A verdade é que ninguém gosta de ler um código bagunçado: ele cansa as vistas, cansa a mente. 

A formatação vertical considera os seguintes pontos: 
  • Espaçamento Vertical entre conceitos
  • Continuidade vertical
  • Distância vertical
  • Ordenação vertical

O espaçamento vertical entre conceito nos orienta a conhecer o momento certo de apertar o space key do nosso teclado. Veja o exemplo abaixo: 

Código de exemplo para clean code com espaçamento vertical

Trata-se de um algoritmo bobo com três variáveis e uma função. A função recebe o valor da idade por parâmetro e retorna um booleano indicando se a pessoa representada pelo objeto é maior de idade, ou não. Observe que a função foi criada na mesma sequência da declaração das variáveis, sem considerar espaçamento. Além disso, a indentação foi jogada no mar do esquecimento.

Aplicando os conceitos da formatação vertical, temos em mente que cada linha representa uma expressão ou uma estrutura, e cada grupo de linhas representa um pensamento. Logo, cada pensamento do seu código precisa ser separado dos outros usando o espaçamento. Ou seja , um simples click no space key já irá contribuir para uma estrutura de código mais limpa:

Exemplo de estrutura de código limpo

Indo direto ao ponto, recomenda-se o espaçamento para separar as declarações de variáveis das funções, e no caso da declaração de múltiplas funções/métodos, também precisa ter espaçamento entre o encerramento de uma e ao inicio da outra. As exceções ocorrem quando as funções possuem afinidade conceitual, quando há uma dependência direta entre elas. Neste caso, é uma boa prática mantê-las juntas uma na outra para facilitar o entendimento das ações que elas executam. 

Código exemplo de afinidade conceitual
Funções que possuem afinidade conceitual

Formatação de um código é uma atividade de refinamento, composta por detalhes. Não considere essa ação como irrelevante! 

Citação de Martin Fowler
Martin Fowler é um grande engenheiro de software, autor de livros sobre refatoração de códigos e UML

Formatação Horizontal 

A formatação horizontal do código tem o conceito bastante similar à vertical, com uma óbvia diferença associada à sua orientação. Esse estilo se preocupa com o tamanho de uma linha de código, delimitando os espaçamentos e continuidade horizontal das instruções. 

“Usamos o espaço em branco horizontal para associar coisas que estão intimamente relacionadas e para desassociar outras fracamente relacionadas.” 

Exemplo de declaração de variável no Swift
Declaração de uma variável no Swift

A falta de espaçamento, na maioria das vezes, não implica em falhas de compilação, mas atrapalha a leitura. Uma simples variável poderá ter sua declaração feita de forma mais harmoniosa, separando os conceitos intimamente associados com um simples space key. 

Exemplo da declaração de variável agora com espaços
Declaração de uma variável no Swift

Essa regra não deve ser levada ao pé da letra. Existem situações em que não se deve atribuir espaçamento entre os elementos pelo mesmo motivo, como na hora de atribuir nome a uma função e no seu parêntese de abertura. 

Declaração de funções
Declaração de funções

Já nos parâmetros da função, pode ser considerada uma boa prática separá-los com um espaçamento a fim de realçar a vírgula e deixar evidente a individualidade entre eles. 

 

Indentação 

Falar de formatação horizontal nos obriga a nos preocuparmos com esse detalhe que, talvez, seja o maior responsável pela elegância de um código. A indentação é usado para indicar a hierarquia do código, evidenciar os acoplamentos entre os métodos e saber “quem está dentro de quem”. Sem esse recurso. os códigos que possuem um maior nível de complexidade se tornariam inteligíveis aos olhos humanos. Sem indentação, a leitura do código fonte seria semelhante a ler uma redação, ou um poema (ruim). 

Um exemplo do uso da indentação na linguagem

Um exemplo do uso da indentação na linguagem
Um exemplo do uso da indentação na linguagem C. Fonte: Wikipédia

Existem alguns casos que talvez não seja necessário o emprego da indentação como, por exemplo, na declaração de uma função que tenha um escopo minúsculo. Nestes casos, se torna mais legível deixá-lo na mesma linha. 

Conclusão 

o dá para resumir a filosofia do Clean Code em um livro, nem tão pouco em um esboço textual como esse. Ainda que o meu objetivo tenha sido destrinchar apenas dois conceitos isolados, sinto que foram omitidos muitos detalhes que precisam ser estudados e avaliados com um olhar mais pragmático sobre o tema.  

Acredito que as regras do Clean Code devem ser aplicadas de acordo com o contexto do projeto e suas regras de negócio, partindo da análise coletiva dos stakeholders envolvidos, e não por uma mera popularidade do assunto ou por convicções isoladas. 

Por outro lado, um código limpo sempre estará intimamente relacionado ao quanto você se preocupa com o próximo. Não só com aquele que irá dar manutenção no seu arquivo quando você não estiver mais presente, como também com as pessoas que são impactadas pelo sistema. Quer um exemplo

Imagine um software crítico executado em um centro nacional de transplante. Esse sistema é responsável pelo gerenciamento da lista de órgãos e tecidos recebido por doadores falecidos, e por indicar qual pessoa da lista de espera deverá ser beneficiada com o transplante.

Aconteceu que, hipoteticamente falando , houve uma falha no sistema que impedia a exibição de todos os dados pessoais da lista de espera, e como não havia backup, uma nova equipe de engenharia da empresa responsável pelo desenvolvimento precisou atuar em uma manutenção corretiva para solucionar o bug no próprio código. A nova equipe chegou na empresa após o desenvolvimento do projeto, logo não haviam participado da concepção e codificação do mesmo.

Quanto mais legível estiver esse código, mas rápido será para a equipe conseguir ter o entendimento e análise para solucionar a falha e trazer a integridade e disponibilidade de volta ao sistema. Caso contrário, vidas serão diretamente afetadas por uma demora a mais na lista de espera. 

Independente da filosofia, escrever códigos legíveis com todos os artefatos possíveis para uma correta interpretação dos outros integrantes é a coisa certa a fazer. 

Sugestões 

Para melhorar sua boa prática de codificação, recomenda-se utilizar plugins nos seus editores de códigos e IDE’s para alertar seus erros e sugerir boas práticas. Minha sugestão é que você procure pelo lint, já que diversas linguagens possuem variações dessa ferramenta.

Plugin do SwiftLint da JetBrains emitindo avisos de más práticas
Plugin do SwiftLint da JetBrains emitindo avisos de más práticas
Compartilhe:

Lucas é formado em Eng. de Software e atua como desenvolvedor mobile na DB1. Amante do Flutter nas horas vagas, acredita que a melhor stack sempre será aquela que resolve o problema do cliente, independente de favoritismo.

Comments (0)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Back To Top