Aikido

Perché dovresti rendere evidente lo scopo di una funzione per ottenere un codice più chiaro

Leggibilità

Regola
Regola una funzione scopo sia evidente.
Nome delle funzioni dovrebbero comunicare chiaramente comunicare cosa il funzione
fa senza richiedere ai lettori di esaminare l' implementazione.

Lingue supportate: 45+

Introduzione

I nomi delle funzioni che non ne rivelano lo scopo costringono gli sviluppatori a leggere l'intera implementazione per comprenderne il comportamento. Una funzione denominata process() oppure handle() potrebbe significare qualsiasi cosa, richiedendo uno sforzo mentale per dedurne il vero scopo. Nomi chiari e descrittivi come validateUserEmail() oppure calculateOrderTotal() comunicare immediatamente l'intento, rendendo il codice autodocumentante.

Perché è importante

Manutenibilità del codice: i nomi delle funzioni poco chiari rallentano la comprensione. Gli sviluppatori perdono tempo a leggere le implementazioni per capire cosa fanno le funzioni, invece di concentrarsi sulla logica di business. Questo problema si aggrava quando si riprende a lavorare sul codice dopo mesi o quando entrano a far parte del team nuovi membri.

Uso errato: I nomi ambigui delle funzioni aumentano il rischio di un uso improprio. Una funzione denominata aggiorna() potrebbe servire a convalidare, trasformare, memorizzare o inviare notifiche, portando gli sviluppatori a utilizzarlo in modo errato poiché il nome non ne specifica il comportamento. I nomi chiari prevengono gli usi impropri documentando i vincoli e gli effetti collaterali.

Esempi di codice

❌ Non conforme:

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

Perché è sbagliato: Il nome process() non rivela nulla su ciò che accade ai dati. I lettori devono esaminare l'implementazione per capire che essa trasforma gli elementi, li salva nel database e invia notifiche. Gli effetti collaterali e le responsabilità della funzione sono nascosti.

✅ Conforme:

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

Perché è importante: il nome indica esplicitamente che la funzione contrassegna gli elementi come elaborati e li salva. I lettori comprendono immediatamente lo scopo principale della funzione senza doverne leggere l'implementazione. Il nome suggerisce la presenza di effetti collaterali (salvataggio nel database), creando aspettative adeguate.

Conclusione

I nomi delle funzioni dovrebbero rispondere alla domanda "A cosa serve questa funzione?" senza che sia necessario esaminare il codice. Includete verbi che descrivono azioni e sostantivi che descrivono gli obiettivi. Se un nome diventa troppo lungo, probabilmente la funzione svolge troppe operazioni e dovrebbe essere suddivisa.

Domande frequenti

Hai delle domande?

Qual è la lunghezza massima dei nomi delle funzioni?

Per quanto necessario a garantire la chiarezza. calculateTotalPriceWithTaxAndShipping() è preferibile a calc(). Gli IDE moderni dispongono della funzione di completamento automatico, che semplifica la digitazione di nomi più lunghi. Privilegia la chiarezza rispetto alla brevità. Se un nome supera le 5-6 parole, la funzione potrebbe avere troppe responsabilità.

I nomi delle funzioni dovrebbero includere dettagli di implementazione?

No, descrivi il comportamento e lo scopo, non l'implementazione. Assegna ai metodi nomi che ne descrivono il risultato, non il modo in cui lo ottengono. sortUsersByName() è preferibile a quickSortUsers(). I dettagli di implementazione possono cambiare, ma lo scopo rimane immutato. In questo modo i nomi mantengono la loro rilevanza durante il refactoring.

E le funzioni di supporto o le funzioni di utilità?

È comunque necessario assegnare loro nomi chiari. Invece di helper() o util(), usa nomi specifici come formatCurrency() o validateEmail(). Se non riesci a trovare un nome specifico, è possibile che lo scopo della funzione non sia chiaro e che debba essere definito meglio.

Come faccio a dare un nome alle funzioni che svolgono più operazioni?

Suddividile. Le funzioni che richiedono nomi come `validateAndTransformAndSave()` violano il principio della responsabilità singola. Crea funzioni separate: `validate()`, `transform()`, `save()`. Se le operazioni devono essere eseguite insieme, utilizza una funzione di coordinamento con un nome che descriva il flusso di lavoro: `processUserRegistration()`.

Metti in sicurezza ora

Metti in sicurezza il tuo codice, il cloud e il runtime in un unico sistema centralizzato.
Trova e risolvi le vulnerabilità rapidamente e automaticamente.

Nessuna carta di credito richiesta | Risultati della scansione in 32 secondi.