Commentaire (informatique)
151584
30790323
2008-06-19T13:08:17Z
Mro
335458
hom [[interpréteur]]
{{Voir homonymes|Commentaire}}
En [[programmation]], les '''commentaires''' sont des portions du [[code source]] ignorées par le [[compilateur]] ou l’[[Interprète (informatique)|interpréteur]], car ils ne sont pas nécessaires à l’exécution du programme.
Les commentaires sont le plus souvent utilisés pour expliquer le code ; certains outils permettent d’extraire l’information disponible dans les commentaires pour générer automatiquement la documentation du programme.
On utilise aussi les commentaires pour masquer du code, mais aussi pour préciser des contraintes ou des propriétés, notamment des préconditions, des postcondictions et des invariants comme cela se fait dans la [[programmation par contrat]].
== Types de commentaires ==
Les façons de distinguer les commentaires du reste du code varient suivant le langage. On distingue trois catégories principales, chaque langage pouvant très bien implémenter plusieurs types de commentaires :
* commentaires en pleine ligne ;
* commentaires de fin de ligne ;
* commentaires en bloc.
=== Commentaires en pleine ligne ===
Un commentaire en pleine ligne commence par un marqueur annonçant une ligne de commentaire (ou par l’absence d’un marqueur annonçant une ligne de code). [[BASIC]], [[Fortran]] et [[Cobol]] sont des langages utilisant des commentaires en pleine ligne. Le code recommence naturellement à la ligne suivante.
*[[BASIC]] :
:<code>REM <var>commentaire</var></code>
*[[Brainfuck]] et [[Brainfork]] :
:<code><var>commentaire</var></code>
:(le commentaire ne doit pas contenir les caractères <code>< > + - , . [ ]</code> ; c’est un exemple d’annonce par absence de marqueur)
*[[Cobol]] :
:<code>000010*<var>COMMENTAIRE</var></code>
:(l’astérisque doit se trouver en 7{{e}} position sur la ligne)
*[[Fortran]] :
:<code>C <var>commentaire</var></code>
:(exactement 6 [[espace typographique|espace]]s entre le caractère <code>C</code> et le <var>commentaire</var> ; <code>C</code> doit absolument être le premier caractère de la ligne)
*[[REALbasic]] :
:<code>rem <var>commentaire</var></code>
:<code>// <var>commentaire</var></code>
:<code>' <var>commentaire</var></code>
=== Commentaires de fin de ligne ===
Un commentaire de fin de ligne commence par un marqueur annonçant le début d’un commentaire, et se termine automatiquement à la fin de la ligne, sans nécessité de marqueur de fin. Les langages [[C plus plus|C++]] et [[Java (langage)| Java]] utilisent ce type de commentaires.
*[[Ada (langage)]], [[AppleScript]], [[Lua (langage)|Lua]], [[Lingo]] :
:<code>--<var>commentaire</var></code>
*[[Assembleur]] :
:<code>; <var>commentaire</var></code>
*[[C (langage)|C (C99)]], [[C plus plus|C++]], [[C sharp|C#]], [[D (langage)|D]], [[Delphi (langage)|Delphi (Pascal objet)]], [[Java (langage)|Java]] et [[PHP: Hypertext Preprocessor|PHP]] :
:<code>// <var>commentaire</var></code>
*[[DIGITAL Command Language|DCL]] :
:<code>$! <var>commentaire</var></code>
*[[Fortran 90]] :
:<code>! <var>commentaire</var></code>
*[[mySQL]] :
:<code>--<var>commentaire</var></code>
:<code>#<var>commentaire</var></code>
*[[Perl (langage)|Perl]], [[Python (langage)|Python]], [[Ruby]], [[C shell]], [[Bourne shell]], [[Tool Command Language|Tcl]], et autres langages shell :
:<code># <var>commentaire</var> </code>
*[[PHP: Hypertext Preprocessor|PHP]] :
:<code># <var>commentaire</var></code>
:<code>// <var>commentaire</var></code>
*[[PILOT]] :
:<code>R:<var>commentaire</var></code>
:(une ''lettre de commande'' peut débuter immédiatement après le commentaire, sur la même ligne)
*[[TeX]], [[LaTeX]], [[PostScript]] :
:<code>% <var>commentaire</var></code>
*[[Texinfo]] :
:<code>@c <var>commentaire</var></code>
:<code>@comment <var>commentaire</var></code>
*[[Visual Basic]] :
:<code>' <var>commentaire</var></code>
*[[REALbasic]] :
:<code>' <var>commentaire</var></code>
:<code>// <var>commentaire</var></code>
=== Commentaires en bloc ===
Un commentaire en bloc commence par un marqueur annonçant le début d’un commentaire et se termine avec un marqueur annonçant sa fin, leur intérêt principal est de pouvoir mettre en commentaire plusieurs lignes sans éditer chacune d'entre elles. Les langages [[Pascal (langage)|Pascal]] et [[C (langage)|C]] utilisent ce type de commentaires.
*[[Algol (langage)|Algol]] :
:<code>comment <var>commentaire</var>;</code>
*[[AppleScript]], [[Modula-2]], [[Modula-3]], [[Oberon (langage)|Oberon]], [[Pascal (langage)|Pascal]] et [[Caml]]:
:<code>(* <var>commentaire</var> *)</code>
*[[C (langage)|C (K&R, ANSI/C89/C90/C99)]], [[C plus plus|C++]], [[C sharp|C#]], [[Feuilles de style en cascade|CSS]], [[Java (langage)|Java]], [[PHP: Hypertext Preprocessor|PHP]] et [[PL/I]] :
:<code>/* <var>commentaire</var> */</code>
*[[Forth (langage)|Forth]] :
:<code>(<var>commentaire</var>) </code>
*[[D (langage)|D]] :
:<code>/* <var>commentaire</var> */</code>
:<code>/+ <var>commentaire</var> +/</code>
*[[Delphi (langage)|Delphi (Pascal objet)]] :
:<code>(* <var>commentaire</var> *)</code>
:<code>{ <var>commentaire</var> }</code>
*[[Haskell]] :
:<code>{- <var>commentaire</var> -}</code>
*[[Standard Generalized Markup Language|SGML]], [[Hypertext Markup Language|HTML]], [[Extensible Markup Language|XML]] :
:<code><!-- <var>commentaire</var> --> </code>
== Utilisation des commentaires ==
=== Documentation ===
Des outils comme [[doxygen]], [[javadoc]] ou [[rdoc]] permettent de structurer les commentaires présents dans le code et de générer une documentation complète. Celle-ci est la plupart du temps destinée à un programmeur désirant développer avec une bibliothèque, mais il est tout à fait possible d’utiliser cette méthode pour écrire la documentation destinée à l’utilisateur final.
<pre>
/**
* Registers the text to display in a tool tip. The text
* displays when the cursor lingers over the component.
*
* @param text the string to display. If the text is null,
* the tool tip is turned off for this component.
*/
public void setToolTipText(String text) {
</pre>
(un extrait de la documentation [[javadoc]] de [[Sun Microsystems]] ; le commentaire est dans un format compréhensible par le processeur javadoc)
=== Désactivation de code ===
On utilise souvent les commentaires pour cacher rapidement des portions de code au [[compilateur]] ou à l’[[Interprète (informatique)|interpréteur]], par exemple pour tester des implémentations alternatives, ou pour désactiver temporairement des fonctionnalités.
Cette désactivation est la plus facile à effectuer lorsque le langage permet des commentaires par blocs. Cependant, dans le cas où la portion de code à cacher contient déjà des commentaires, la syntaxe du langage ne permet pas toujours de simplement d’imbriquer ces commentaires. Certains langages fournissent un niveau supérieur de commentaires pour pallier cela :
*Préprocesseur [[C (langage)|C]] :
:<code>#if 0</code>
:<code> code; //<var>commentaire</var></code>
:<code> encore du code; /* <var>commentaire</var> */</code>
:<code>#endif</code>
*[[Extensible Markup Language|XML]] :
:<code><![IGNORE[</code>
:<code> <code> <!-- <var>commentaire</var> --> </code>
:<code>]]></code>
== Exemples ==
=== C ===
<pre>
/*
* Check if we are over our maximum process limit, but be sure to
* exclude root. This is needed to make it possible for login and
* friends to set the per-user process limit to something lower
* than the amount of processes root is running. -- Rik
*/
if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur
&& !capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE))
goto bad_fork_free;
</pre>
(extrait du fichier <code>fork.c</code> du noyau [[Linux]])
=== Perl ===
<pre><nowiki>
# a strange way to check whether any significant editing
# have been done: check whether any new non-empty lines
# have been added. Yes, the below code ignores *any* space
# in *any* line.
while (<REP>) {
s/\s+//g;
$unseen++ if $_ ne '' and not exists $REP{$_};
}
</nowiki></pre>
(extrait de <code>perlbug.PL</code> dans la distribution standard de [[Perl (langage)|Perl]])
=== PHP ===
<pre>
/*
* Scan forwards to find beginning of another run of changes.
* Also keep track of the corresponding point in the other file.
*
* Throughout this code, $i and $j are adjusted together so that
* the first $i elements of $changed and the first $j elements
* of $other_changed both contain the same number of zeros
* (unchanged lines).
* Furthermore, $j is always kept so that $j == $other_len or
* $other_changed[$j] == false.
*/
while ($j < $other_len && $other_changed[$j])
$j++;
</pre>
(extrait de [[MediaWiki]], le logiciel utilisé par [[Wikipedia]], une encyclopédie collaborative en ligne)
{{Lien BA|en}}
[[Catégorie:Développement logiciel]]
[[ar:تعليق (برمجة)]]
[[de:Kommentar (Programmierung)]]
[[en:Comment (computer programming)]]
[[ja:コメント (コンピュータ)]]
[[nl:Commentaar (programmeren)]]
[[pl:Komentarz (informatyka)]]
[[ru:Комментарии (программирование)]]