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.