Style d'indentation

Un article de Wikipédia, l'encyclopédie libre.

En informatique, l'indentation consiste en l'ajout de tabulations ou d'espaces dans un fichier texte. Le style d'indentation décrit les différentes manières que les programmeurs utilisent pour faire ressortir un bloc de code.

L'indentation se définit par la manière d'arranger les blocs de code, mais surtout par le nombre d'espaces utilisés à chaque niveau.

L'indentation peut ne pas être qu'esthétique. En effet, elle s'avère obligatoire pour certains langages afin de former des blocs ou des lignes valides (par exemple Occam, Fortran ou Python).

Styles d'indentation en C[modifier | modifier le code]

Style K&R[modifier | modifier le code]

C'est le style employé par Brian Kernighan et Dennis Ritchie pour rédiger les exemples dans leur livre Le Langage C, connu comme le premier livre sur le langage C.

void a_function(void)
{
    if (x == y) {
        something1();
        something2();
    } else {
        somethingelse1();
        somethingelse2();
    }
    finalthing();
}

Il place donc l'accolade ouvrante d'une fonction sur la ligne suivant la partie déclarative, contrairement aux autres accolades (par exemple des structures de contrôle) qui sont laissées sur la même ligne que la déclaration.

Variantes[modifier | modifier le code]

Il existe de nombreuses variantes de ce style. Une variante relativement commune consiste à placer l'accolade ouvrante des fonctions sur la même ligne que la partie déclarative ; en dehors du C, c'est un des usages recommandés par Sun pour son langage Java, par exemple[1].

Une autre nuance couramment rencontrée peut venir du placement du mot-clé else. Certains développeurs préfèrent en effet positionner celui-ci sur une ligne à part entière.

Style Allman[modifier | modifier le code]

Nommé d'après Eric Allman, ce style respecte un alignement strict des accolades ouvrantes et fermantes, comme dans l'exemple ci-dessous :

void a_function(void)
{
    if (x == y)
    {
        something1();
        something2();
    }
    else
    {
        somethingelse1();
        somethingelse2();
    }
    finalthing();
}

L'avantage principal de ce style est qu'on peut visuellement repérer très facilement tout oubli d'accolade. De plus, on a une séparation claire entre le contenu de chaque bloc de code, ce qui améliore la lisibilité. Ceci est obtenu au prix d'un nombre de lignes plus important que pour d'autres styles. Il est très proche du style « Whitesmiths ».

Style Whitesmiths[modifier | modifier le code]

if (x == y)
    {
    something1();
    something2();
    }
else
    {
    somethingelse1();
    somethingelse2();
    }
finalthing();

Les usages diffèrent sur la manière de placer les accolades pour les fonctions ; certains auteurs indentent le corps et les accolades par rapport à la partie déclarative, d'autres indentent le corps sans indenter les accolades, d'autres encore n'indentent ni le corps ni les accolades.

Style GNU[modifier | modifier le code]

La recommandation officielle du GNU incite les programmeurs à placer le type de retour de la fonction sur une ligne à part, de sorte à aligner le nom de la fonction sur la première colonne. De même, les parenthèses servant aux appels de fonctions doivent être précédées d'une espace[2].

Ces considérations ne sont toutefois pas limitées au style GNU et il n'est pas rare de rencontrer l'une ou l'autre de ces notations avec d'autres styles d'indentation. Par exemple, le KNF régissant la présentation du code des noyaux BSD requiert que le type de retour d'une fonction soit placé seul sur une ligne précédant le nom de celle-ci.

void
a_function (void)
{
  if (x == y)
    {
      something1 ();
      something2 ();
    }
  else
    {
      somethingelse1 ();
      somethingelse2 ();
    }
  finalthing ();
}

Style Pico[modifier | modifier le code]

if (x == y)
{ something1 ();
  something2 (); }
else
{ somethingelse1 ();
  somethingelse2 (); }
finalthing ();

Ce style provient du langage Pico.

Styles d'indentation en C++[modifier | modifier le code]

Style utilisé par Bjarne Stroustrup[modifier | modifier le code]

C'est le style employé par Bjarne Stroustrup, inventeur du langage C++, pour rédiger les exemples dans son livre décrivant le langage C++.

Celui-ci s'apparente à une variation du style K&R, étendu aux nouveautés apportées par le C++.

Styles Ada, C++, Java, PHP...[modifier | modifier le code]

Les langages de haut niveau de ce genre, qui dérivent tous d'Algol (1960), emploient un style similaire[3].

Turbo-Pascal, norme de fait du Pascal de 1983 à nos jours (Delphi), a introduit un style de codage plus efficace et plus lisible[4], à deux caractères d'indentation, largement employé dans d'autres langages, par exemple en PHP ou en Ada[3]. (program TimeInterrupt de l'unité standard GetTime.PAS)

begin
  ah := $2c;                             {initialize correct registers}
  with recpack do
  begin
    ax := ah shl 8 + al;
  end;
  intr($21,recpack);                     {call interrupt}
  with recpack do
  begin
    str(cx shr 8,hour);                  {convert to string}
    str(cx mod 256,min);                       { " }
    str(dx shr 8,sec);                         { " }
  end;
  time := hour+':'+min+':'+sec;
end;

Autres Styles[modifier | modifier le code]

Occam[modifier | modifier le code]

IF
  sgf.res <> 0
    SKIP
  TRUE
    IF
      compare.strings (ThfareKey, "99999999") <> 0
        SEQ
          ThfareKeyInt := AtoI (ThfareKey)
          ThfareOffsets [ThfareKeyInt] := Offset
      TRUE
        SKIP

En Occam, c'est l'indentation qui est porteuse de l'information d'appartenance à un bloc, ce qui évite les constructions de blocs ("begin", "then", "end"). L'indentation est de deux caractères. Ci-dessus, TRUE est l'équivalent de "default" ou "else" des constructions "if" ou "case of" ("switch" en C).

FORTRAN V[modifier | modifier le code]

subroutine ch_cap ( c )
  implicit none

  character c

  if ( 97 <= itemp .and. itemp <= 122 ) then
    c = char ( itemp - 32 )
  end if

  return
end

Ce style est très proche du type "dérivé Turbo Pascal" ci-dessus. Notez qu'en FORTRAN standard, les 5 premiers caractères de chaque ligne sont théoriquement réservés, soit aux commentaires ("C" en première colonne), soit aux numéros de lignes (labels) d'après le format des cartes perforées Hollerith (1890) à 80 colonnes (@IBM 1926).

Lisp[modifier | modifier le code]

(defun compall ()
  (do-symbols (s)
    (when (fboundp s)
      (unless (compiled-function-p (symbol-function s))
        (print s)
        (compile s)))))

L'indentation recommandée est de 2 caractères sauf exceptions pour certaines formes spéciales, et évite les constructions de blocs ("begin", "then", "else", "end"). Les parenthèses fermantes sont regroupées et ne sont pas verticalement alignées avec les parenthèses ouvrantes correspondantes. L'écriture de programme Lisp est favorisée par l'utilisation d'éditeurs permettant de mettre en évidence les paires de parenthèses ouvrantes/fermantes correspondantes, et permettant d'indenter automatiquement le code en fonction de la structure.


Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Références[modifier | modifier le code]

  1. (en) « Code Conventions for the Java Programming Language »
  2. (en) Formatting Your Source Code - The GNU Coding Standards
  3. a et b (fr) standard et guide d'écriture des développements en Ada, JP Germe, société 3ip, 1989
  4. (fr) Turbo-Pascal 3.0 (1986)