DEV Community

Cover image for ūüĎ®‚ÄćūüíĽ Boas pr√°ticas de programa√ß√£o
Stanley Gomes
Stanley Gomes

Posted on • Updated on

ūüĎ®‚ÄćūüíĽ Boas pr√°ticas de programa√ß√£o

Olá pessoal, nesse post vou abordar alguns pontos que reuni sobre boas práticas de programação simples, que tive a oportunidade de aprender e que podem ser incorporadas no fluxo de desenvolvimento para tornar seu código mais seguro e confiável.

Não vou focar tanto em aspectos técnicos e teóricos de livros como o clean code. Para um aprofundamento maior sobre conceitos, recomendo fortemente a leitura do livro. Você pode ainda buscar alguns outros artigos e vídeos que possam resumir os princípios base.

Por ter mais familiaridade, vou utilizar exemplos com a linguagem Javascript, porém todos os pontos abordados nesse artigo servem para qualquer linguagem de programação.

Vamos direto ao assunto.

Alt Text

Imagem de: https://www.geeksforgeeks.org/7-tips-to-write-clean-and-better-code-in-2020/

1. Atenção ao padrão

Você pode se encontrar em dois cenários diferentes. Vou torcer para que seja a segunda opção.

Primeiro cen√°rio: voc√™ est√° mantendo um projeto legado. Siga os padr√Ķes de implementa√ß√£o que foram criados at√© o momento, como nomenclatura de arquivos e pastas, idioma de vari√°veis, tabelas de bancos de dados, at√© mesmo cores e fontes.

Caso voc√™ esteja come√ßando um projeto novo, tenha em mente que o momento dessas defini√ß√Ķes de padr√£o √© fundamental para voc√™ seguir com solidez no desenvolvimento at√© a entrega e vai ajudar muito todos os membros da equipe a seguir o desenvolvimento com menos dependencia.

Se você está começando um projeto e não tem autonomia para definir essas regras, porém percebeu que está faltando. Essa é sua oportunidade de apresentá-las.

2. Nomenclatura

Os pequenos detalhes importam. Padroniza√ß√£o sem√Ęntica e sint√°tica de arquivos, vari√°veis, m√©todos, classes etc em qualquer linguagem aumentam muito a produtividade.

Escreva nomes que deem significado ao código.

Se você olhar para o código sentir que dá para entender exatamente o que está acontecendo sem precisar escrever comentários, sua missão foi cumprida.

D√° uma olhada nesse exemplo:

// código sem padrão
function executar(param1, param2) {
    const resposta = passo1(param1);

    if (resposta === false) {
        return passo2(param1, param2)[mensagem];
    } else{
        return 'Não foi possível cadastrar usuário';
    }
}

// código com padrão
function cadastrarUsuario(email, senha) {
    const existe = existeEmailCadastrado(email);

    if (existe === true) {
        return 'Este email j√° tem cadastro no sistema';
    } else {
        const usuarioCriado = salvar(email, senha);

        return usuarioCriado.mensagem
    }
}
Enter fullscreen mode Exit fullscreen mode

No primeiro trecho de código é muito difícil entender o código sem debugar, já no segundo, uma simples leitura permite entender todo o código.

3. Cada coisa no seu lugar

Quando pensamos em desenvolvimento ágil é fundamental derrubar barreiras. Uma delas é quando um novo desenvolvedor começa a manter um projeto que não possui padronização de projeto.

https://i.imgur.com/nVF0Gye.png

Quando um projeto est√° sistematizado √© muito f√°cil desenvolver novas funcionalidades e corrigir bugs. Voc√™ precisa alterar uma consulta SQL? Alterar um par√Ęmetro de sistema? Adicionar uma nova propriedade numa classe? Voc√™ sabe exatamente em que pasta vai encontrar.

4. Código limpo

Acredito que este é o ponto mais fácil dessa lista. Remova código comentado ou que não seja utilizado pela aplicação. Mantenha a prática de sempre revisar o código antes fazer um novo commit?

Quando revisar seu c√≥digo, verifique tamb√©m se existem anota√ß√Ķes de impress√£o de log desnecess√°rios na aplica√ß√£o (console.log no JS, system.out.print ou logger no Java). Essas anota√ß√Ķes de log desnecess√°rias poluem o log da aplica√ß√£o e dificulta a valida√ß√£o de problemas reais.

// remova variaveis nao utilizadas
const variavelNaoUtilizada;

// remova metodos nao utilizados
function funcaoNaoUtilizada(a, b) {
    return a + b;
}

// remova logs irrelevantes
function funcaoGenerica(params) {
    console.log('Entrou na funcao...', params);
}
Enter fullscreen mode Exit fullscreen mode

Alguns editores de texto como o vscode ajudam a identificar código não utilizado marcando esses blocos com uma cor mais clara.

5. Reutilizar

Assim como no meio ambiente, a prática de reutilização traz muitos benefícios a longo prazo. Código duplicado é uma prática que abre brechas para muitos bugs e gera muito retrabalho.

Como escrever um c√≥digo mais reutiliz√°vel? Uma forma de simplificar essa mentalidade √© pensar em responsabilidade. Seu c√≥digo, suas fun√ß√Ķes, classes e m√©todos precisam ter o m√≠nimo ou apenas uma √ļnica responsabilidade.

function cadastrarUsuario(email, senha) {
    const existe = existeEmailCadastrado(email);

    if (existe === true) {
        return 'Este email j√° tem cadastro no sistema';
    } else {
        const senhaHash = hash(senha)
        const usuarioCriado = salvar(email, senhaHash);

        return usuarioCriado.mensagem
    }
}

function recuperarSenha(email, senha) {
    const existe = existeEmailCadastrado(email);

    if (existe === false) {
        return 'Este email n√£o tem cadastro no sistema!';
    } else {
        const senhaHash = hash(senha)
        const usuarioAlterado = atualizar(email, senhaHash);

        return usuarioCriado.mensagem
    }
}
Enter fullscreen mode Exit fullscreen mode

Veja que no exemplo acima, as fun√ß√Ķes hash e existeEmailCadastrado foram utilizadas em lugares diferentes com objetivos diferentes. A reutiliza√ß√£o evitou que todo o processo executado dentro dessas duas fun√ß√Ķes fosse escrito dentro dos m√©todos recuperarSenha e cadastrarUsuario.

6. Use linters

Seguir padr√Ķes de projeto n√£o √© f√°cil, por isso √© fundamental utilizar um linter para "vigiar" o seu c√≥digo e te alertar sobre as pr√°ticas recomendadas e o que voc√™ deixou pra tr√°s.

Alguns exemplos de linters: Javascript com ESLint, Java com SonarLint, Python com Pylint.

https://davidwalsh.name/eslint

7. Indentação

Em algumas linguagens como python, indentação é uma prática obrigatória, já que os blocos de código são separados dessa maneira.

Em outras linguagens, como Javascript e Java, indentação não é obrigatório, mas com certeza um código bem indentado é muito mais fácil de se entender.

Veja abaixo um exemplo da diferença que faz ter um código indentado.

// exemplo com indentação
function fatorial (numero) {
    if (numero < 0) {
        return 'O n√ļmero deve ser maior ou igual a zero!';
    } else if ((numero == 0) || (numero == 1)) {
        return 1;
    } else {
        let acumulador = 1;

        for (x = numero; x > 1; x--) {
            acumulador = acumulador * x;
        }

        return acumulador;
    } 
}

// sem indentação
function fatorial (numero) {
    if (numero < 0) {
return 
'O n√ļmero deve ser maior ou igual a zero!';} else if ((numero == 0) || (numero == 1)) {
        return 1;
    }
else {
    let acumulador = 1; for (x = numero; x > 1; x--) {acumulador = acumulador * x}

return acumulador;
    } 
}
Enter fullscreen mode Exit fullscreen mode

No Javascript, você pode utilizar uma ferramenta para visualizar onde precisa ajustar a indentação, o Prettier.

B√īnus: Busque conhecimento

A melhor prática com certeza é a busca pela evolução constante. Se você está lendo este post, está no caminho certo.

A tecnologia muda muito e novas boas pr√°ticas sempre chegam.

Você não precisa decorar as boas práticas ou mudar toda sua forma de programar. Este processo é continuo.


Obrigado pela leitura! Espero que possa ter ajudado. ūüöÄ

Até mais.

Top comments (2)

Collapse
 
cleysonlb profile image
Cleyson Leal Braga

Muito bom Stanley, ótimos tópicos, hoje temos ótimas ferramentas para manter o código organizado e faz muita diferença no code base, parabéns pelo post!

Collapse
 
stanley profile image
Stanley Gomes

Obrigado Cleyson. Isso é verdade, temos muitas boas ferramentas atualmente. Bom poder ter ajudado a compartilhar um pouco sobre!