Código limpo e boas práticas de programação

Search for a command to run...

No comments yet. Be the first to comment.
Desenvolver uma aplicação web no Flutter já não é mais novidade, está presente dentro do Flutter desde 2021. Tivemos até uma certa desconfiança e uma real necessidade de evolução da plataforma. Mas como está o Flutter Web hoje, em 2023? Vale a pena u...

Tivemos um boom de pessoas migrando de carreira e sonhando em virar desenvolvedor. Existia uma promessa de que com alguns poucos meses de estudo, você já estaria empregado e até com um salário muito bom. Por algum tempo, podemos dizer que essa promes...

São diferentes tipos de desenvolvimento e diferentes áreas que você pode atuar. Já conhece quais caminhos você pode seguir nas áreas de TI? Desenvolvedor Este é o caminho mais comum, e geralmente, pode onde todos nós começamos. Um desenvolvedor é aqu...

Código não é tudo para um desenvolvedor. Se você quer se destacar na sua carreira precisa ter outras habilidades que vão muito além do técnico. Hoje vamos falar de algumas softskills bem importantes para os desenvolvedores. Comunicação Como desenvolv...

Sempre é bom ter um boilerplate pronto para o seu novo projeto. Mas você sabe o que é um boilerplate? O que é um boilerplate? Sempre que você começa um novo projeto, você repete o mesmo processo, certo? Por exemplo: instala o React, configura o NextJ...

devGo
42 posts
Escrever código não é tão simples quanto parece. Não basta saber a linguagem e desenvolver uma aplicação extremamente complexa, o seu código deve ser legível! Hoje vamos discutir algumas técnicas e boas práticas de programação para manter o seu código limpo.
Pense sempre que você não irá trabalhar sozinho em um sistema, e mesmo que trabalhe, algum dia esse sistema precisará de manutenção, seja sua, ou de algum colega. Já pensou trabalhar em um código que você não faz a mínima ma ideia do que está escrito? É uma experiência que não recomendo a ninguém.
O objetivo de ter um código limpo é ter um código legível. De que qualquer pessoa, ou até você mesmo daqui a alguns meses, ou anos no futuro consiga voltar ao código, entender todas as funções e processos realizados.
Durante o desenvolvimento aplicamos alguns conceitos que apesar de básicos, ajudam consideravelmente a manter o seu código limpo:
Os nomes de variáveis e funções devem ser extremamente intuitivas. Não se preocupe se o nome ficar “grande demais”, isso não é um problema. O importante aqui é que você entenda o que é essa variável, ou a função, por exemplo:
const n = 'Paulo';
const npn = () => {};
O que é variável n? O que é a função npn? Hoje você pode até entender o que significam esses termos, mas o seu colega entende? Daqui a alguns meses, depois de vários outros códigos, você irá entender? Estes são péssimos exemplos de como pode ser o seu código.
O ideal é que você use algo extremamente claro, como:
const name = 'Paulo';
const getNumberOfPostsByName = () => {};
Da mesma forma que o nome de uma função é importante e deva dizer exatamente o que ela faz, é importante que essa função tenha um objetivo bastante específico e apenas um único objetivo.
Uma função que faz 3 coisas ao mesmo tempo, pode ser bastante confuso para um bom entendimento de código. Veja o exemplo:
const addNewPost = (title, content) => {
const fixedContent = content.replace(/(<([^>]+)>)/ig, "");
const post = postRepository.add(title, fixedContent);
const subscribed = newsletterRepository.getAll();
subscribed.forEach((client) => {
mailService.sendNotification(client.mail, "Novo post na devGo", post);
});
}
Uma função deve ser o mais simples possível e ter apenas uma única funcionalidade. Não se importe com o número de funções, quanto maior, melhor. Isso fará até que suas funções sejam bem menores, facilitando também a compreensão do sistema.
Pequenas funções, claras e objetivas, eliminam até mesmo a necessidade de comentários no código —outra prática que é bom ser evitada.
Veja a diferença:
const parseContent = () => {
const parsedContent = content.replace(/(<([^>]+)>)/ig, "");
return parsedContent;
}
const sendPostToNewsletter = (post) => {
const mailTitle = "Novo post na devGo";
const subscribed = newsletterRepository.getAll();
subscribed.forEach((client) => {
mailService.sendNotification(client.mail, mailTitle, post);
});
}
const handleNewPost = (title, content) => {
const parsedContent = parseContent(content);
const post = postRepository.add(title, parsedContent);
sendPostToNewsletter(post);
}
Um código bem formatado traz uma organização visual ao seu código imensa!
Existem algumas ferramentas que podem te ajudar a formatar, como o ESLint ou Prettier. Com elas você pode deixar todos os parâmetros bem configurados e com o auxílio de algumas extensões do VSCode essa organização pode acontecer automaticamente.
Se ainda assim o código estiver difícil de entender, vamos recorrer aos commits. Um commit deve dizer exatamente o que ocorreu naquele momento do desenvolvimento.
Commits genéricos, são uma péssima prática. Não faça nada como:
git commit -m "update code"
Tenha em mente que commits não só uma “atualização”, commits são também documentação do desenvolvimento. Uma boa prática é a cada funcionalidade acrescentada no código ter um novo commit. A ideia são sempre vários commits pequenos, documentando cada ponto acrescentado, como:
git commit -m "feat: add function to post on page"
git commit -m "feat: add trigger to new post on newsletter"
Os métodos trazidos aqui podem evoluir para outros princípios de design de código, como o KISS, DRY e YAGNI. Estes princípios foram pensados em como deixar o seu código organizado, estável e legível e é extremamente recomendado que você passe a utilizar em seus projetos.
Faço ainda uma menção ao SOLID: 5 princípios bem relevantes de implementação ao seu código. SOLID acaba sendo tão importante que vamos preparar um único artigo para podermos explorar melhor todos os métodos.
Levaremos esses conceitos por todas as postagens, projetos e conteúdos produzidos aqui na devGo. A ideia por trás de todas essas práticas são ter um código limpo. É claro que para cada caso, a um método diferente, e nem tudo deve ser tratado como uma “lei”: programar é se adaptar. Apenas tenha como objetivo um código fácil de ser compreendido, compartilhado e modificado.