Voltar
São Paulo, Brasil
Boas práticas de programação
6 min de leitura
Descubra a importância de um código legível e organizado para o trabalho em equipe e manutenção posterior do software. Melhore suas práticas de programação.
Bons programadores sabem que escrever código não é apenas uma tarefa mecânica para fazer um programa funcionar corretamente. Na verdade, a qualidade do código é essencial para garantir a eficiência do trabalho em equipe e a manutenção do software ao longo do tempo.
Portanto, é fundamental seguir boas práticas de programação, focadas em tornar o código mais legível, organizado e compreensível para outros programadores que podem estar trabalhando no mesmo projeto. Confira a seguir uma lista de práticas que podem facilitar o dia a dia durante o desenvolvimento do código.
Ao desenvolver um software, é comum trabalhar em equipe. Diversos desenvolvedores podem estar envolvidos no mesmo projeto, e o código precisa ser compreensível para todos eles. A legibilidade é crucial para facilitar a colaboração, uma vez que colegas de equipe precisarão revisar, modificar e melhorar o código escrito por outros. Um código bem escrito reduz a probabilidade de erros serem introduzidos durante as alterações, economizando tempo e esforço da equipe.
O ciclo de vida de um software não termina com sua primeira versão. Ao longo do tempo, novas funcionalidades serão adicionadas, bugs serão corrigidos e adaptações serão feitas para atender a novos requisitos. Um código claro e organizado simplifica essa manutenção contínua. Quando um programador precisa voltar a um trecho de código após meses ou anos, a legibilidade dele permite entender rapidamente a lógica empregada, acelerando o processo de atualização.
Além das revisões em equipe, os desenvolvedores frequentemente precisam discutir o código entre si. Quando o código é bem escrito, as discussões técnicas se tornam mais fáceis, já que a clareza na expressão das ideias facilita a troca de conhecimento e a solução de problemas. Código mal estruturado e confuso pode levar a mal-entendidos e atrasar o progresso do projeto.
Seguir boas práticas de programação ajuda a estabelecer padrões de codificação no projeto. Isso torna o código consistente em todo o software, o que facilita a identificação de erros e a compreensão global da arquitetura do programa.
Embora o computador possa executar código não otimizado ou confuso, é essencial lembrar que os programas são feitos para serem lidos e compreendidos por seres humanos. Um código bem escrito pode ajudar a identificar possíveis gargalos de desempenho e melhorar a eficiência do programa como um todo.
Investir tempo e esforço em escrever código de forma legível e organizada é um investimento valioso para a equipe de desenvolvimento. Lembre-se de que um código bonito não é apenas sobre estética, mas sobre garantir que a inteligência humana possa facilmente compreender e aprimorar o que foi criado.
Vamos estudar as possibilidades de melhora em uma aplicação prática: um cronômetro para partidas de xadrez. Teremos dois relógios, acionados de forma alternada, exibindo o tempo restante de cada jogador para decidir sua jogada. Uma vez que o tempo de um jogador acaba, a vitória é do seu adversário, independentemente da disposição das peças.
Vamos programar nossa aplicação usando React, uma biblioteca baseada em Javascript que facilita a customização e componentização de elementos gráficos . Porém, as dicas aqui também são "language-agnostic", podendo ser aplicadas em outros ambientes e linguagens.
(<h1>, <img>, <div>)
Todos no meu time vão entender o que essa função faz!
Um mito promovido pela falsa confiança! Nem todos os programadores pensam igual, e o nosso próprio modo de pensar muda com o tempo. Variáveis e funções devem ser sempre claras em seu funcionamento. Um nome comprido é preferível a um curto, bonito, e que não diz nada sobre sua utilidade!
const [ whiteTimer, setWhiteTimer ] = useState(TOTAL_TIME)
O que a variável "whiteTimer" guarda? A função de timer do jogador branco? O seu tempo restante? Um objeto com várias propriedades?
Vendo pela declaração, ela guarda o tempo restante. Então, por que não deixar essa informação destacada? Confira abaixo.
const [ remainingTimeWhite, setRemainingTimeWhite ] = useState(TOTAL_TIME)
Outro exemplo:
const [ turn, setTurn ] = useState("white") //in chess, white always starts
Como controlar de quem é a vez de jogar? Usando uma string? Quais são os valores disponíveis?
Veja a nossa sugestão de abordagem abaixo:
const [ isWhiteTurn, setIsWhiteTurn ] = useState(true) //in chess, white always starts
Seguindo o padrão de nomenclatura "isSomething" para variáveis tipo "boolean", todos os programadores conseguem saber quais estados ela pode ter (true / false), e seu significado é obvio: é a vez das peças brancas (ou das pretas). Nomenclaturas padrão agregam valor ao código!
Comentário? Meu código se explica sozinho!
Variáveis bem nomeadas ajudam bastante na clareza do código. Mas às vezes isso não é o bastante. É fácil entender o que essa função faz?
useEffect(() => {
const timer = setTimeout(() => {
if (isWhiteTimerRunning) {
setRemainingTimeWhite(remainingTimeWhite - 1)
}
}, 1000)
if (remainingTimeWhite === 0) {clearTimeout(timer)}
})
Pequenos comentários podem tirar grandes dúvidas. Confira no exemplo.
//White timer
//dec remainingTime by 1 sec each 1 sec
useEffect(() => {
const timer = setTimeout(() => {
if (isWhiteTimerRunning) {
setRemainingTimeWhite(remainingTimeWhite - 1) //dec 1 sec
}
}, 1000) //each 1 sec
if (remainingTimeWhite === 0) {clearTimeout(timer)}
})
O uso do número "1000" indica que a função deve ser chamada a cada 1000 milisegundos, ou seja, 1 minuto. Sem um comentário claro, ele parece um "número mágico" - expressão usada na programação para definir valores aparentemente arbitrários que resolvem o problema de forma enigmática.
### Estrutura de dados
Nosso relógio começa com 15 minutos para cada jogador, sendo esse valor decrementado a cada segundo. Como salvar essas variáveis no código?
const [ remainingMinutes, setRemainingMinutes ] = useState(15)
const [ remainingSeconds, setRemainingSeconds ] = useState(0)
//Tempo: 14:02 -> 14:01 -> 14:00 -> 13:59
//observar todas as mudanças no valor "remainingSeconds",
//e chamar essa função toda vez que "remainingSeconds" for menor que zero
function resetMinutes() {
//TODO:
//resetar "remainingSeconds" para 59;
//diminuir em 1 o valor de "remainingMinutes";
}
Já que a aplicação terá dois relógios, todo esse código terá que ser duplicado para salvar e acompanhar os minutos e segundos dois jogadores. Nada muito escalável.
Como a diferença entre "minutos" e "segundos" só será usada na parte visual, o código pode salvar o tempo restante como uma quantidade absoluta, e tratar apenas como vamos exibir essa informação:
const TOTAL_TIME = 15 * 60 //15min * 60s/min = 900s
const [ remainingTimeWhite, setRemainingTimeWhite ] = useState(TOTAL_TIME)
const [ remainingTimeBlack, setRemainingTimeBlack ] = useState(TOTAL_TIME)
//60s -> 1:00; 7s -> 0:07
function formatTime(time: number) {
return `${Math.floor(time / 60)}:${String(time % 60).padStart(2, '0')}`
}
Observe que, exibindo o valor de retorno da função "formatTime", tratamos os casos como os anteriores:
Segundos que passam de "00" para "59"
Valores menores que "10" ganham um zero a esquerda
Fazendo escolhas inteligentes, deixamos o código mais organizado.
Lembrando, um código bem construído ajuda tanto os seus colegas de trabalho quanto você. Siga as boas práticas de programação para ter sempre um produto de qualidade!
Relacionados
Leia também
A história da Stage Consulting
Stage Consulting
Consulting
5 min de leitura
100+ projetos concluídos: transformando negócios com uma nova consultoria
Stage Consulting
Consulting
5 min de leitura
Boas práticas de programação
Stage Consulting
Consulting
6 min de leitura
Quebrando passwords com a RTX 4090
Miguel Couto
Desenvolvedor Fullstack
3 min de leitura
Gamificação no trabalho: aumentando o engajamento dos colaboradores
João Tenshin
UX/UI Designer
4 min de leitura
4 dicas de UX para UI
Stage Consulting
Consulting
4 min de leitura
Equipamento de $25 hackeou o Starlink
Miguel Couto
Desenvolvedor Fullstack
4 min de leitura
O que vamos
construir juntos?
2022 Stage Consulting. Todos os direitos reservados.