En programación informática , una declaración es una construcción del lenguaje que especifica las propiedades de un identificador : declara el significado de una palabra (identificador). [1] Las declaraciones se utilizan más comúnmente para funciones , variables , constantes y clases , pero también se pueden utilizar para otras entidades como enumeraciones y definiciones de tipos. [1] Más allá del nombre (el identificador en sí) y el tipo de entidad (función, variable, etc.), las declaraciones suelen especificar el tipo de datos (para variables y constantes) o la firma de tipo (para funciones); los tipos también pueden incluir dimensiones, como para matrices . Una declaración se utiliza para anunciar la existencia de la entidad al compilador ; esto es importante en aquellos lenguajes fuertemente tipados que requieren que las funciones, variables y constantes, y sus tipos, se especifiquen con una declaración antes de su uso, y se utiliza en la declaración adelantada . [2] El término "declaración" se contrasta con frecuencia con el término "definición", [1] pero el significado y el uso varían significativamente entre lenguajes; consulte a continuación.
Las declaraciones son especialmente importantes en los lenguajes de la tradición ALGOL , incluida la familia BCPL , principalmente C y C++ , y también Pascal . Java utiliza el término "declaración", aunque Java no requiere declaraciones y definiciones independientes.
Una dicotomía básica es si una declaración contiene o no una definición: por ejemplo, si una declaración de variable o constante especifica su valor , o solo su tipo; y de manera similar, si una declaración de una función especifica el cuerpo ( implementación ) de la función, o solo su firma de tipo. [1] No todos los lenguajes hacen esta distinción: en muchos lenguajes, las declaraciones siempre incluyen una definición, y pueden denominarse "declaraciones" o "definiciones", según el lenguaje. [a] Sin embargo, estos conceptos se distinguen en lenguajes que requieren declaración antes del uso (para lo cual se utilizan declaraciones adelantadas), y en lenguajes donde la interfaz y la implementación están separadas: la interfaz contiene declaraciones, la implementación contiene definiciones. [b]
En el uso informal, una "declaración" se refiere únicamente a una declaración pura (solo tipos, sin valor ni cuerpo), mientras que una "definición" se refiere a una declaración que incluye un valor o cuerpo. Sin embargo, en el uso formal (en las especificaciones del lenguaje), "declaración" incluye ambos sentidos, con distinciones más precisas por lenguaje: en C y C++, una declaración de una función que no incluye un cuerpo se denomina prototipo de función , mientras que una declaración de una función que sí incluye un cuerpo se denomina "definición de función". En Java, las declaraciones se presentan en dos formas. Para los métodos públicos, se pueden presentar en interfaces como firmas de método, que consisten en los nombres de los métodos, los tipos de entrada y el tipo de salida. Se puede utilizar una notación similar en la definición de métodos abstractos , que no contienen una definición. La clase envolvente se puede instanciar, en lugar de eso, se necesitaría crear una nueva clase derivada, que proporcione la definición del método, para crear una instancia de la clase. A partir de Java 8 , se incluyó la expresión lambda en el lenguaje, que podría verse como una declaración de función.
En la familia C de lenguajes de programación, las declaraciones se suelen recopilar en archivos de encabezado , que se incluyen en otros archivos fuente que hacen referencia a estas declaraciones y las utilizan, pero que no tienen acceso a la definición. La información del archivo de encabezado proporciona la interfaz entre el código que utiliza la declaración y el que la define, una forma de ocultar la información . Una declaración se suele utilizar para acceder a funciones o variables definidas en diferentes archivos fuente o en una biblioteca . Una discrepancia entre el tipo de definición y el tipo de declaración genera un error del compilador.
En el caso de las variables, las definiciones asignan valores a un área de memoria que se reservó durante la fase de declaración. En el caso de las funciones, las definiciones proporcionan el cuerpo de la función. Si bien una variable o función se puede declarar muchas veces, normalmente se define una sola vez (en C++ , esto se conoce como regla de una definición o ODR).
Los lenguajes dinámicos como JavaScript o Python generalmente permiten redefinir funciones, es decir, volver a enlazarlas ; una función es una variable como cualquier otra, con un nombre y un valor (la definición).
A continuación se muestran algunos ejemplos de declaraciones que no son definiciones en C:
extern char ejemplo1 ; extern int ejemplo2 ; void ejemplo3 ( void );
A continuación se muestran algunos ejemplos de declaraciones que son definiciones, nuevamente en C:
char ejemplo1 ; /* Fuera de una definición de función, se inicializará a cero. */ int ejemplo2 = 5 ; void ejemplo3 ( void ) { /* definición entre llaves */ }
En algunos lenguajes de programación, se proporciona una declaración implícita la primera vez que se encuentra una variable de este tipo en tiempo de compilación . En otros lenguajes, este uso se considera un error, que puede dar lugar a un mensaje de diagnóstico. Algunos lenguajes comenzaron con el comportamiento de declaración implícita, pero a medida que maduraron, proporcionaron una opción para deshabilitarla (por ejemplo, " " de Perl o " " de Visual Basic ).use strict
Option Explicit
[Una] declaración [...] introduce sólo el nombre y el tipo de algo, pero no asigna espacio de almacenamiento [...].