Article de reference

Déclaration (programmation informatique)

En programmation informatique , une déclaration dans un langage syntaxique consiste à spécifier les propriétés d'un identificateur pour son initialisation : elle déclare la sign...

programmation informatique , une déclaration dans un langage syntaxique consiste à spécifier les propriétés d'un identificateur pour son initialisation : elle déclare la signification d'un identificateur. Les déclarations sont le plus souvent utilisées pour les fonctions , les variables , les constantes et les classes , mais peuvent également servir à d'autres entités telles que les énumérations et les définitions de types. Outre le nom (l'identificateur lui-même) et le type d'entité (fonction, variable, etc.), les déclarations spécifient généralement le type de données (pour les variables et les constantes) ou la signature de type (pour les fonctions) ; les types peuvent également inclure des dimensions, comme pour les tableaux . Une déclaration sert à signaler l'existence de l'entité au compilateur ; ceci est important dans les langages fortement typés qui exigent que les fonctions, les variables et les constantes, ainsi que leurs types, soient spécifiés par une déclaration avant utilisation, et est utilisé dans la déclaration anticipée . Le terme « déclaration » est souvent opposé au terme « définition », mais leur signification et leur usage varient considérablement d'un langage à l'autre ; voir ci-dessous.

Les déclarations sont particulièrement importantes dans les langages de la tradition ALGOL , notamment la famille BCPL , en particulier C et C++ , ainsi que Pascal . Java utilise le terme « déclaration », bien qu'il n'exige pas de déclarations et de définitions distinctes.

spécifie-t-elle sa valeur ou seulement son type ? De même, la déclaration d'une fonction spécifie-t-elle son corps ( implémentation ) ou seulement sa signature ? Cette distinction n'est pas systématique : dans de nombreux langages, les déclarations incluent toujours une définition et peuvent être appelées « déclarations » ou « définitions », selon le langage. ​​Toutefois, ces concepts sont distingués dans les langages qui exigent une déclaration avant utilisation (on utilise alors les déclarations anticipées) et dans les langages où l'interface et l'implémentation sont séparées : l'interface contient les déclarations, l'implémentation contient les définitions.

Dans le langage courant, une « déclaration » désigne une déclaration pure (types uniquement, sans valeur ni corps), tandis qu'une « définition » désigne une déclaration incluant une valeur ou un corps. Cependant, dans le langage formel (dans les spécifications des langages), le terme « déclaration » englobe ces deux sens, avec des distinctions plus fines selon le langage : en C et C++, la déclaration d'une fonction sans corps est appelée prototype de fonction , tandis que la déclaration d'une fonction avec corps est appelée définition de fonction. En Java, les déclarations se présentent sous deux formes. Pour les méthodes publiques, elles peuvent être présentées dans les interfaces sous forme de signatures de méthode, composées du nom de la méthode, de ses types d'entrée et de son type de sortie. Une notation similaire peut être utilisée pour la définition des méthodes abstraites , qui ne contiennent pas de définition. La classe englobante peut être instanciée directement ; il est nécessaire de créer une nouvelle classe dérivée, fournissant la définition de la méthode, pour créer une instance de la classe. À partir de Java 8 , l'expression lambda a été introduite dans le langage et peut être considérée comme une déclaration de fonction.

Déclarations et définitions

Dans la famille des langages de programmation C, les déclarations sont souvent regroupées dans des fichiers d'en-tête , inclus dans d'autres fichiers sources qui référencent et utilisent ces déclarations, mais n'ont pas accès à leur définition. Les informations contenues dans le fichier d'en-tête assurent l'interface entre le code utilisant la déclaration et celui qui la définit, une forme d' encapsulation . Une déclaration est souvent utilisée pour accéder à des fonctions ou des variables définies dans différents fichiers sources, ou dans une bibliothèque . Une incompatibilité entre le type de la définition et le type de la déclaration génère une erreur de compilation.

Pour les variables, les définitions assignent des valeurs à une zone mémoire réservée lors de leur déclaration. Pour les fonctions, les définitions fournissent le corps de la fonction. Bien qu'une variable ou une fonction puisse être déclarée plusieurs fois, elle n'est généralement définie qu'une seule fois (en C++ , on parle de la règle de définition unique ou ODR).

Les langages dynamiques tels que JavaScript ou Python permettent généralement de redéfinir les fonctions, c'est -à -dire de les redéfinir ; une fonction est une variable comme une autre, avec un nom et une valeur (la définition).

Voici quelques exemples de déclarations qui ne sont pas des définitions, en C :

la compilation . Dans d'autres langages, cet usage est considéré comme une erreur, pouvant entraîner l'affichage d'un message d'erreur. Certains langages ont intégré ce comportement dès leur conception, mais ont par la suite proposé une option pour le désactiver (par exemple, « " » en Perluse strict ou « " » en Visual BasicOption Explicit ).