Clean Code - Conceitos | Exemplos 🎈
CLEAN CODE para iniciantes:
Faaala turma, tranquilo!? aqui estão alguns conceitos básicos sobre Clean Code.
"Qualquer tolo pode escrever códigos que um computador possa entender. Bons programadores escrevem códigos que os humanos podem entender. " – Martin Fowler
Clean Code é uma habilidade crucial que todo dev deveria dominar! 🔥
A maioria dos exemplos foram retirados de Robert J. Martin's - Clean Code. Um clássico.
1. Como nomear variáveis
- Não crie comentários para explicar o porquê de uma variavel estar sendo usada. Se um nome exigir um comentário, renomeie essa variável em vez de comentar.
"Um nome deve lhe dizer por que existe, o que faz e como é usado. Se um nome exigir um comentário, o nome não revelará sua intenção. " – Clean Code
Ruim:
var d; // tempo decorrido em dias
Bom:
var tempoDecorridoEmDias;
var diasDesdeACriacao;
var diasDesdeAModificacao;
2. Use nomes pronunciáveis
- Se você não pode pronunciar um nome, não pode discuti-lo sem parecer um lerdão.
Ruim:
const yyyymmdstr = moment().format("YYYY/MM/DD");
Boa:
const currentDate = moment().format("YYYY/MM/DD");
3. Usar nomes pesquisáveis
-
Evite usar números mágicos no seu código. Opte por constantes pesquisáveis. Não use letras únicas (x,y,z,...).
-
Eles podem aparecer em muitos lugares e, portanto, não são facilmente encontradas.
Ruim:
if (student.classes.lenght < 7) {
// Faça alguma coisa
}
Boa:
if (student.classes.lenght < MAX_CLASSES_PER_STUDENT) {
// Faça alguma coisa
}
4. Funções: como escrever
-
As funções devem ser pequenas, muito pequenas! Quanto mais longa a função, é mais provável que ela faça várias coisas e tenha efeitos colaterais.
-
Certifique-se de que eles fazem apenas alguma coisa
Functions should do one thing. They should do it well. They should do it only. – Clean Code
- A única coisa que essa função faz deve ser declarada em seu nome.
Pode ser difícil às vezes olhar para um função e ver se ela está fazendo várias coisas ou não. Uma boa maneira para se verificar é tentar extrair outras funções com um nome diferente. Se isso ocorrer, deve ser feita uma outra função.
5. Condicionais encapsuladas em funções
- Refatorar a condição e colocá-la em uma função nomeada é uma boa maneira de tornar seus condicionais mais legíveis.
Este código é responsável por inserir um chip no tabuleiro de um jogo.
O isValidInsertion é o método na qual cuida em verificar a validade do número da coluna e nos permite focar na lógica de inserir o chip
public void insertChipAt(int column) throws Exception {
if (isValidInsertion(column)) {
insertChip(column);
boardConfiguration += column;
currentPlayer = currentPlayer == Chip.RED ? Chip.YELLOW : Chip.RED;
} else {
if (!columnExistsAt(column))
throw new IllegalArgumentException();
else if (isColumnFull(column - 1) || getWinner() != Chip.NONE)
throw new RuntimeException();
}
}
Aqui está o código para isValidInsertion, se você estiver interessado.
private boolean isValidInsertion(int column) {
boolean columnIsAvailable = column <= NUM_COLUMNS && column >= 1 && numberOfItemsInColumn[column - 1] < NUM_ROWS;
boolean gameIsOver = getWinner() != Chip.NONE;
return columnIsAvailable && !gameIsOver;
}
Sem o método, a condição se pareceria com isso:
if (column <= NUM_COLUMNS
&& column >= 1
&& numberOfItemsInColumn[column - 1] < NUM_ROWS
&& getWinner() != Chip.NONE)
Nojento, certo? Concordo.
-
Conclusão
o Clean Code não é algo fácil de se adquirir do dia pra noite. É o poder do hábito, aplicando tais conceitos sempre que você ecrever algum código.
Espero que tenha aprendido algo com este artigo, como eu aprendi. Bons estudos!
Vídeos relacionados a CLEAN CODE na PRÁTICA:
Canais: Código Fonte | Rocketseat com Mayk Brito
Recentemente vi a necessidade (acima de deixar o código limpo ou não) de encapsular condicionais em funções separadas quando precisei ter certeza que minha biblioteca de validação tinha 100% de cobertura de código. A única forma de atingir era separando as condicionais em funções.
Então, dessa forma, sugiro acrescentar ao seu texto mais essa vantagem: Tornar o código mais testável.
Clean code deveria ser entendido como uma prática contínua que te livra de maus hábitos. Fazendo uma analogia, é como sempre escrever português certo, com vírgula, ponto, acento, independente se é no WhatsApp ou na prova da escola/faculdade/trabalho. Fazendo o certo sempre, independendo da situação, o fazer certo sai naturalmente, sem esforço nenhum.
Apenas para complementar Kevaosz
, SOLID são princípios que reforçam as boas práticas do código limpo. Na minha opinião, são conceitos mais fáceis de entender e aplicar!
O lado ruim (se é que há um lado ruim) é que são princípios desenhados para programação orientada a objeto. Então, para o desenvolvedor frontend react, por exemplo, muitas vezes é díficil perceber o valor desses conceitos, saca?
Esses dias eu achei esse vídeo aqui massa demais. Vale muito a pena pra reforçar a importância https://youtu.be/MSq_DCRxOxw
Para complementar o assunto, tem esse exelente site aqui: https://refactoring.guru/refactoring/what-is-refactoring
Essa parte de clean code não está traduzida, mas tem coisas lá super interessantes em PT-BR
Também trabalho com programação, porém diferente das linguagens como C, C++, python, etc... Eu utilizo a linguagem Ladder para programação de CLPs. Apesar disso, seu post me inspirou a utilizar os princípios do Clean Code dentro da linguagem Ladder e tenho certeza que fazendo isso posso mudar para muito melhor a forma como eu e outras pessoas entenderão os programas a partir de agora.
Muito obrigado por compartilhar!
E funções simples assim, o que acham? To começando no JS
let avg = (a) => {
let b = 0;
for(c of a) b += c
return b / a.length
}
Retorna a média de um array
Olhei esse post e pensei que poderia ter uma ferramenta/entensão que olha nosso código e nos diz se há erros de convenções.
legal!
Faço algumas automacoes em JS e uso muito essa forma de nomear variáveis, nada desconexo do que estamos escrevendo, muito bom!
Muito bom! Simples e objetivo.
O mundo da programação seria melhor se todos aplicassem as praticas do clean code. Particularmente fico perdido num código desorganizado. A nomenclatura adequada no código pode poupar tempo e ajudar na manutenção. Código legado mal escrito é uma tortura para manipular. Por tempos melhores rs
Muito bom!!!
Deu uma resumida absurda e eficiente do que se trata o livro do Tio Bob. Falou pouco, mas falou bonito. Muito bom!
Imagino que todos os programadores que já trabalharam com uma equipe, tenham passado por uma ou duas situações de um código "sujo", ou simplesmente um serviço/API mal documentada.
Lembro até hoje uma função de uma biblioteca que usei, onde os parametros eram literalmente (a, b, c, d, e)
Sim, passei uns bons 30 minutos testando para descobrir o que cada um dos parâmetros faziam.
Muito bom mesmo, adorei as dicas!
Caramba, que tópico necessário! Tenho muitos problemas com Clean Code ainda, por ser um iniciante na área, ainda engatinhando kkkkkkkk Algo que me tira o sono direto é que eu me sinto um pouco paranóico de vez em quando, com relação a todo essa coisa de boas práticas/convenções. As vezes escrevo uma linha de código e passo meia hora me questionando se aquilo tá certo, se tá dentro das convenções da comunidade, sabe? Acho que falar de clean code é essencial, mas com moderação, como tudo na vida rsrsrs
Uma dúvida: deve-se encapsular a condicional em função mesmo que ela seja usada apenas uma vez no código?
Acho que uma boa prática que todos deveriam utilizar são as normas que são utilizadas em sua respectiva linguagem, por exemplo eu desenvolvo em PHP, é essencial que eu leve em conta as famosas PSR's, são muitas? sim, são 20 aceitas até hoje, mas não é obrigatório decorar todas, apenas se adequar a elas com o tempo desenvolvendo. Segue link do site oficial das PSR's: https://www.php-fig.org/psr/
Simples, objetivo, e muito preciso. Que esse post seja uma campanha. Rsrs :D
Muito bom, sempre gosto de aprender sobre esse tema para melhorar cada vez mais meu código!
Parabéns pelo conteúdo! Eu gostaria de colocar a seguinte dúvida:
- Existe um princípio onde criamos classes de domínio usando construtores, e até métodos para representar alguma regra de negócio, isso também faz parte do clean code ?
Bom post!
Muito bom o texto, é sempre bom ver conceitos de Clean Code na prática por aí. Nós programadores somos todos(as) escritores(as) e devemos sim nos importar com quem está lendo o nosso código, nesse caso, outros programadores. Escrever código entendível para máquinas é fácil, díficil mesmo é escrever código para que seres humanos possam entender, acredito que isso é o propósito em essência do Clean Code.
[salvar]
Parabéns pelo conteúdo.