Aikido

Por que você deve tornar o propósito de uma função autoevidente para um código mais claro

Legibilidade

Regra
Faça uma função objetivo autoexplicativo.
Nome devem devem comunicar comunicar o que função função
faz sem exigir leitores examinem examinar a implementação.

Idiomas suportados: 45+

Introdução

Nomes de funções que não revelam seu propósito forçam os desenvolvedores a ler toda a implementação para entender o comportamento. Uma função nomeada process() ou handle() poderia fazer qualquer coisa, exigindo esforço mental para deduzir seu propósito real. Nomes claros e descritivos como validateUserEmail() ou calculateOrderTotal() comunicar a intenção imediatamente, tornando o código auto-documentável.

Por que isso importa

Manutenibilidade do código: Nomes de funções pouco claros atrasam a compreensão. Desenvolvedores perdem tempo lendo implementações para entender o que as funções fazem, em vez de focar na lógica de negócios. Isso se agrava ao retornar ao código meses depois ou quando novos membros da equipe se juntam.

Uso incorreto: Nomes de função ambíguos aumentam a chance de uso indevido. Uma função chamada update() pode validar, transformar, persistir ou notificar, levando os desenvolvedores a usá-lo incorretamente porque o nome não especifica o comportamento. Nomes claros evitam o uso indevido ao documentar restrições e efeitos colaterais.

Exemplos de código

❌ Não-conforme:

function process(data) {
    const result = data.map(item => ({
        ...item,
        processed: true,
        timestamp: Date.now()
    }));
    db.save(result);
    notifyService.send(result);
    return result;
}

Por que está errado: O nome process() não revela nada sobre o que acontece com os dados. Os leitores devem examinar a implementação para saber que ela transforma itens, salva no banco de dados e envia notificações. Os efeitos colaterais e as responsabilidades da função estão ocultos.

✅ Compatível:

function markItemsAsProcessedAndSave(data) {
    const processedItems = data.map(item => ({
        ...item,
        processed: true,
        timestamp: Date.now()
    }));
    db.save(processedItems);
    notifyService.send(processedItems);
    return processedItems;
}

Por que isso importa: O nome declara explicitamente que a função marca itens como processados e os salva. Os leitores entendem imediatamente o propósito principal da função sem ler a implementação. O nome sugere efeitos colaterais (salvar no banco de dados), estabelecendo expectativas apropriadas.

Conclusão

Nomes de funções devem responder "o que isso faz?" sem exigir inspeção de código. Inclua verbos que descrevam ações e substantivos que descrevam alvos. Se um nome se tornar muito longo, a função provavelmente faz demais e deve ser dividida.

FAQs

Dúvidas?

Qual o comprimento máximo para nomes de funções?

Pelo tempo que for necessário para ser claro. calculateTotalPriceWithTaxAndShipping() é melhor do que calc(). IDEs modernos possuem autocompletar, tornando nomes mais longos fáceis de digitar. Priorize a clareza em detrimento da brevidade. Se um nome exceder 5-6 palavras, a função pode ter muitas responsabilidades.

Nomes de funções devem incluir detalhes de implementação?

Não, descreva comportamento e intenção, não implementação. Nomeie as funções pelo que elas realizam, não como. sortUsersByName() é melhor do que quickSortUsers(). Detalhes de implementação podem mudar, mas o propósito permanece estável. Isso mantém os nomes relevantes durante o refactoring.

E quanto às funções auxiliares ou de utilidade?

Eles ainda precisam de nomes claros. Em vez de helper() ou util(), use nomes específicos como formatCurrency() ou validateEmail(). Se você não conseguir pensar em um nome específico, o propósito da função pode estar incerto e precisa de uma definição melhor.

Como nomear funções que fazem múltiplas coisas?

Divida-as. Funções que precisam de nomes como validateAndTransformAndSave() violam o princípio da responsabilidade única. Crie funções separadas: validate(), transform(), save(). Se as operações precisarem acontecer juntas, use uma função orquestradora com um nome que descreva o fluxo de trabalho: processUserRegistration().

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.