testo che rappresenta un'architettura pulita

Clean Code nelle PR: guida essenziale

Nel lavoro quotidiano di uno sviluppatore senior, la revisione del codice (PR Review) è una delle attività più strategiche e frequenti. Non si tratta solo di approvare righe di codice, ma di contribuire attivamente alla qualità complessiva del software, migliorando leggibilità, manutenibilità e coerenza dell’intero progetto.

Questa guida raccoglie alcuni dei principi da tenere sempre a mente per effettuare revisioni efficaci e per scrivere codice pulito in modo naturale durante lo sviluppo. Per chi non l’abbia fatto consiglio la lettura di clean code

Uno dei libri a mio avviso fondamentali che un developer dovrebbe leggere. Molte delle “regole” che suggerisco vengono da questo libro.

1. Nomi che Parlano da Soli

  • Rendi esplicito lo scopo: nomi di variabili, metodi e classi devono chiarire subito cosa fanno o cosa rappresentano.
  • Usa verbi per i metodi e sostantivi per le classi.
  • Un termine per ogni concetto: non alternare get, retrieve, fetch per la stessa azione.
  • Evita abbreviazioni criptiche: il codice dovrebbe essere leggibile anche a distanza di mesi.
  • Usa nomi ricercabili: evita lettere singole o sigle oscure che rallentano la navigazione nel codice.

2. Funzioni Pulite

  • Devono essere brevi: più il blocco cresce, più diventa difficile da capire e testare.
  • Una sola responsabilità: se un metodo fa più cose, va diviso.
  • Livello di astrazione costante: evita di mescolare dettagli bassi (es. logica di formattazione) con concetti di alto livello (es. logica di business).
  • Ordine leggibile: il codice dovrebbe “leggersi come un libro”, con i dettagli in fondo.
  • Numero di parametri ridotto: massimo tre; se servono di più, considera un oggetto wrapper.
  • Nessun effetto collaterale: una funzione deve fare una cosa e farla bene, senza modificare lo stato globale.

3. Commenti: Meno è Meglio

  • Il codice è il tuo miglior commento: punta alla massima espressività nel codice stesso.
  • Scrivi commenti solo quando servono davvero, ad esempio:
    • Per segnalare workaround temporanei
    • Per chiarire logiche complesse
    • Per avvisi o limitazioni
  • Evita commenti ridondanti: se un metodo si chiama calcolaTotale(), non serve scrivere // Calcola il totale.
  • I TODO devono essere azionabili e facilmente ricercabili.

4. Formattazione Coerente

  • Organizza verticalmente il codice: metti vicini i metodi correlati.
  • Mantieni le classi compatte: idealmente sotto le 300 righe.
  • Ordina logicamente variabili e metodi: dichiarazioni in alto, utilizzi in basso.
  • Evita righe orizzontali troppo lunghe che costringono a scrollare lateralmente.
  • Segui le convenzioni del team: l’uniformità vale più del gusto personale.

5. Dati e Oggetti

  • Non esporre dettagli interni: un modulo deve sapere il meno possibile sullo stato interno degli altri oggetti.
  • Utilizza DTO (Data Transfer Object) per scambiare dati tra livelli, ma senza logica.
  • Scegli consapevolmente tra approccio procedurale e orientato agli oggetti: il primo è flessibile per funzioni, il secondo per tipi.

6. Gestione degli Errori

  • Usa eccezioni, non flag o null.
  • Dai contesto agli errori: includi messaggi esplicativi, parametri coinvolti e cause potenziali.
  • Evita il try-catch silenzioso: logga sempre l’errore, anche se viene gestito.
  • Mai restituire null, mai accettare null come parametro senza validazione.

7. Unit Test Efficaci

  • Scrivi i test prima del codice (TDD), almeno per i casi critici.
  • Un solo assert per test, o comunque un solo concetto testato alla volta.
  • Mantieni i test leggibili, veloci e indipendenti.
  • Ogni test deve essere eseguibile in isolamento, più volte e in qualsiasi ordine.
  • Evita test fragili e basati su dati esterni o randomici.

8. Classi Pulite

  • Rispetta il principio di responsabilità singola (SRP): una classe, un compito.
  • Alta coesione: i metodi devono lavorare sugli stessi dati.
  • Bassa accoppiatura: una classe dovrebbe sapere poco o nulla di come funzionano le altre.
  • Non aggiungere metodi “just in case”: ogni metodo deve avere uno scopo chiaro.

Conclusione

Scrivere e revisionare codice pulito non è solo una buona pratica: è una responsabilità. Ogni PR è un’opportunità per costruire software più solido, leggibile e longevo. Serve inoltre ad instaurare un dialogo costruttivo all’interno del team sul rispetto degli standard e su un modo comune di scrivere il codice.

Un team che adotta questi principi riduce i bug, accelera il time-to-market e rende più semplice l’onboarding di nuovi sviluppatori.

La qualità non si corregge a fine progetto. Si costruisce ogni giorno, una PR alla volta.



Pubblicato

in

da