Clean Code – Conceitos

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.

Deixe um comentário

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