Un paramètre est au sens large un élément d'information à prendre en compte pour prendre une décision ou pour effectuer un calcul.
En informatique, un paramètre est une donnée manipulée par une section de code (voir : sous-programme, fonction, méthode) et connue du code appelant cette section.
On distingue deux types de paramètres :
Un paramètre d'entrée est une donnée fournie par le code appelant au code appelé. Cette donnée peut être transmise de deux façons :
Un paramètre de sortie est une donnée fournie par le code appelé au code appelant. Dans certains langages de programmation, il n'est pas possible de définir de paramètres de sortie autrement qu'en utilisant un paramètre d'entrée par son adresse. D'autres langages de programmation (comme le Pascal par exemple) obligent le programmeur à spécifier explicitement si un paramètre est d'entrée, de sortie ou d'entrée-sortie.
Il s'agit de la variable utilisée dans le corps du sous-programme.
Il s'agit de la variable (ou valeur) fournie lors de l'appel du sous-programme. Certains langages, comme Perl 6, utilisent le terme paramètre pour paramètre formel et argument pour paramètre effectif.
Une variable dont le nom est un numéro. Par exemple, en programmation shell UNIX, le premier paramètre d'un script s'appelle $1, le deuxième $2 et ainsi de suite. Paramètre positionnel peut signifier un paramètre effectif qui est reconnu par sa position mais dont le nom de la variable associée reste celui du paramètre formel. Dans certains langages comme Perl 6, les paramètres formels positionnels finaux peuvent déclarés comme optionnels.
Contrairement aux paramètres positionnels, les paramètres nommés impliquent que chaque paramètre formel correspondant comprend non simplement la valeur, mais aussi le nom. L'Objective C a un mécanisme qui ressemble à celui de paramètres nommés. Il s'agit en fait d'un nom de fonction composite et le passage de paramètre est bien un passage positionnel.
Il se peut que les paramètres effectifs (positionnels ou nommés) soient trop nombreux. Dans la plupart des langages ce serait une erreur. Certains langages fournissent des paramètres formels implicites pour ce trop plein. En Perl 5, un tableau appelé @_
est utilisé. c'est même le seul mécanisme de reception de paramètres effectifs En Perl 6, les variables de trop plein viennent en complément des paramètres positionnels et nommés @_
est le nom par défaut du tableau de trop plein et %_
le nom par défaut de la table associative de trop plein. Notez que l'existence de @_
fait que le système de passage de paramètres en Perl 6 est une extension du système de Perl 5. Notez que le trop plein n'est pas une forme de gestion d'erreurs mais une partie intégrale de la richesse du mécanisme de paramètre de Perl 6.
On voudrait quelquefois que tout ou partie d'un tableau fasse partie des paramètres positionnels formels. C'est possible en Perl 6.
Le typage des paramètres formels, supporté ou requis par certains langages, permet selon le cas de vérifier à la compilation ou à l'exécution le type des paramètres effectifs et de susciter une erreur ou une exception un des paramètres effectifs n'est pas du type attendu. Voir typage dynamique et typage statique pour plus d'information.
On appelle signature la liste des types des paramètres formels d'une fonctions ou méthode. Plusieurs signatures peuvent être attachées au même nom de fonction ou de méthode. En d'autre termes plusieurs fonctions ou méthodes peuvent avoir le même nom mais sont distinguées par les types de leurs paramètres formels. Les paramètres effectifs permettront de déterminer quel est la signature la plus proche selon une métrique qui dépend du langage utilisé. Ce mécanisme qui consiste à choisir la bonne fonction ou méthode selon la signature et les paramètre formels s'appelle le dispatch multiple
Finalement une méthode ou fonction peut être partiellement abstraite par l'utilisation d'un type générique pour l'un de ces arguments formels, on parle alors de généricité. Si le corps de la méthode ou fonction est défini, on parle de polymorphisme paramétré, sinon de polymorphisme par sous-typage .