Código limpo em C++: como escrever para não ter vergonha depois de um ano

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que código limpo em C++ não é sobre pedantismo, mas sobre respeito



Se você já abriu um projeto escrito "de qualquer jeito" há um ano e não conseguiu entender o que faz uma função chamada doStuff() — você sabe do que estamos falando. Código limpo em C++ não é apenas estética. É economia de tempo, nervos e dinheiro. C++ é uma linguagem poderosa, mas também traiçoeira: a memória é gerenciada manualmente, os templates podem gerar monstros e a sobrecarga de operadores pode ser mágica pura. Sem disciplina, o código rapidamente se transforma em "espaguete".



Neste artigo, vamos abordar como escrever código limpo em C++ para que seja fácil de ler, manter e expandir. Sem enrolação — apenas prática, exemplos e princípios comprovados.



Regra nº1: Nomenclatura é 50% do sucesso



Os nomes de variáveis, funções e classes devem responder à pergunta "o que é isso?" ou "o que faz?". Esqueça int x e void f(). Use nomes significativos.



Exemplo ruim

int d; // o que é d? distância? data? idiota?void p() { // imprime? analisa? chora?    // ...}


Exemplo bom

int distanceInMeters;void printUserProfile() {    // ...}


Dica: Mantenha um estilo consistente. Para C++, o padrão é camelCase para variáveis e funções, PascalCase para classes. Não misture snake_case e camelCase no mesmo projeto — isso reduz a legibilidade.



Regra nº2: Funções devem ser pequenas e fazer uma única coisa



O princípio da responsabilidade única (Single Responsibility) funciona não apenas para classes, mas também para funções. A função ideal tem de 5 a 20 linhas. Se uma função faz mais de uma ação — divida-a.



Ruim

void processData(vector<int>& data) {    // ordenação    sort(data.begin(), data.end());    // filtragem    vector<int> filtered;    for (int x : data) if (x > 0) filtered.push_back(x);    // saída    for (int x : filtered) cout << x << " ";}


Bom

vector<int> filterPositive(const vector<int>& data) {    vector<int> result;    for (int x : data) if (x > 0) result.push_back(x);    return result;}

void printData(const vector<int>& data) { for (int x : data) cout << x << " ";}

void processData(vector<int>& data) { sort(data.begin(), data.end()); auto filtered = filterPositive(data); printData(filtered);}


Agora cada função pode ser reutilizada e testada separadamente. Código limpo em C++ é modularidade.



Regra nº3: Evite números mágicos e strings



Números e strings cujo valor não é claro pelo contexto são um mal. Coloque-os em constantes.



Ruim

if (temperature > 100) {    cout << "Perigo!";}


Bom

constexpr int MAX_SAFE_TEMPERATURE = 100;

if (temperature > MAX_SAFE_TEMPERATURE) { cout << "Perigo!";}


Agora, se o limite mudar, você altera em um único lugar. Em vez de procurar todos os 100 pelo código.



Regra nº4: Comentários não são desculpa para código ruim



O melhor comentário é aquele que não é necessário, porque o código fala por si só. Não escreva "o que o código faz" — isso é óbvio. Escreva "por que ele faz isso".



Comentário ruim

// incrementa i em 1i++;


Comentário bom

// Usamos pré-incremento para tipos POD — mais rápido++i;


Use // TODO: para partes incompletas, mas não abuse. O código ideal não requer explicações.



Regra nº5: Use RAII e ponteiros inteligentes



C++ é famoso pelo gerenciamento manual de memória, mas no C++ moderno (C++11 e posteriores) existem ferramentas poderosas

Blogs

Book Recommendations