I vari stili d’identazione – Lezione 46 di Java Avanzato

Nella programmazione, l’indentazione rappresenta le regole che disciplinano la formattazione dei blocchi di codice. L’indentazione consente di rendere il codice dei programmi più leggibile, mette in relazione i flussi di controllo e i costrutti utilizzati (come condizioni e loop). In particolar modo, la formattazione del codice risulta essere molto utile nei linguaggi di programmazione della famiglia “parentesi graffa“, al punto che l’indentazione può essere vista come un vero e proprio aspetto dello stile di programmazione. In alcuni linguaggi (come Python e Occam), invece, l’indentazione è usata per determinare le strutture dati al posto delle parentesi.

La dimensione dell’indentazione utilizzata è in genere indipendente dello stile adottato. Utilizzare due spazi oppure il tasto tab è influente. Nel tempo sono stati inventati molti stili di indentazione, tra questi, i più famosi sono:

  • Stile K&R, così chiamato perché è stato usato da Kernighan e Ritchie nel libro The C Programming Language ed ormai comunemente usato in C, C++ e C#, così come in altri linguaggi di programmazione che usano le parentesi graffe.
    Lo stile K&R prevede che ogni funzione abbia la propria parentesi graffa d’apertura nella riga successiva all’intestazione e allo stesso livello di indentazione della funzione. Le istruzioni all’interno delle parentesi graffe vengono opportunamente rientrate, e la parentesi graffa di chiusura si trova allo stesso livello di indentazione dell’intestazione della funzione.

    In un esempio in C avremo:

      int main(int argc, char *argv[])
      {
          // ...
          while (a == b) {
              doSomething();
              doSomething2();

              if (flag) {
                  doCorrect();
              } else
                  doIncorrect();
        }

        finalize();
        // ...
      }

    Come si può notare, per le istruzioni di controllo con una sola istruzione, è possibile omettere le parentesi graffe (come nel caso dell’else). Inoltre, in alcuni casi le parentesi graffe d’apertura possono trovarsi nella stessa linea delle intestazione del metodo. Quest’eccezione vale solo per le parentesi d’apertura, le parentesi graffe di chiusura si troveranno sempre in una nuova linea.

  • 1TBS. Si tratta di una versione dello stile di K&R che viene considerata da alcuni l’unico e vero stile per i linguaggi che usano le parentesi graffe. Il codice del kernel di Unix e Linux è scritto in questo stile d’indentazione prevede che: i costrutti che permettono inserimenti di nuove linee di codice (ad esempio if, while e for) devono essere scritti su righe separate; i costrutti che non consentono di inserire nuovr linee devono essere scritti su un’unica linea. Ad esempio non è concesso scrivere sulla stessa riga di un if, ma dovremo scrivere:
      if (a < 0) {
          inserisci("Negativo");
          negativo(x);
      } else {
          inserisci("Non-negativo");
          nonNegativo(x);
      }

    Questo stile viene spesso utilizzato anche in Java in cui la parentesi graffa d’apertura si trova sulla stessa riga della dichiarazione di una classe o di un metodo. L’utilizzo di questo stile è dovuto soprattutto a causa della Sun che ha utilizzato questa variante del K&R per scrivere per le proprie linee guida.

  • Stroustrup. Si tratta dell’adattamento di Bjarne Stroustrup dello stile K&R per il C++. In questa versione le parentesi dei flussi di controllo sono indipendenti, ad esempio per l’esempio precedente avremo che la parentesi di chiusa dell’if sarà inserita in una propria linea e non accorpata con l’else successivo:

      if (a < 0) {
          inserisci("Negativo");
          negativo(x);
      }
      else {
          inserisci("Non-negativo");
          nonNegativo(x);
      }
  • Stile Allman, che prende il nome da Eric Allman, noto programmatore americano. Lo stile Allman è anche conosciuto come “stile BSD” poiché è stato adottato dallo stesso Allman per la scrittura di molti programmi per BSD Unix.

    Questo stile inserisce le parentesi graffe di un’istruzione di controllo nella riga successiva e con lo stesso livello d’indentazione di quest’ultima. Le istruzioni contenuto nel controllo saranno opportunamente rientrate, ad esempio:

      while (a == b)
      {
          doSomething();
          doSomething2();
      }

      finalize();

    Come si può notare dall’esempio, le parentesi del ciclo while sono inserite in una propria linea e sono formattate allo stesso livello dell’intestazione del ciclo. Questo stile migliora la leggibilità e rende più facile trovare parentesi graffe corrispondenti ad un’istruzione.

Esistono molti altri stili di formattazione come lo stile Whitesmiths, lo stile GNU, Horstmann, Pico, le Banner style, lo stile Lisp e lo stile Ratliff.

Indice Lezione Precedente

Pubblicato in Guide, Java, Programmazione Taggato con: , , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*