En programación informática , una declaración en una construcción de lenguaje sintáctico es el proceso de especificar las propiedades de un identificador para su inicialización : 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 pueden usarse para otras entidades como enumeraciones y definiciones de tipo. [ 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 arreglos . 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 anticipada . [ 2 ] El término "declaración" se contrasta frecuentemente con el término "definición", [ 1 ] pero el significado y el uso varían significativamente entre lenguajes; véase más abajo.
Las declaraciones son particularmente importantes en los lenguajes de la tradición ALGOL , incluyendo la familia BCPL , principalmente C y C++ , y también Pascal . Java utiliza el término "declaración", aunque no requiere declaraciones y definiciones separadas.
Declaración frente a definición
Una dicotomía básica es si una declaración contiene o no una definición: por ejemplo, si la declaración de una variable o constante especifica su valor o solo su tipo; y de manera similar, si la 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 los cuales se utilizan declaraciones anticipadas) y en lenguajes donde la interfaz y la implementación están separadas: la interfaz contiene las declaraciones, la implementación contiene las 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" abarca ambos sentidos, con distinciones más sutiles según el 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 de 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 contenedora se puede instanciar, pero sería necesario crear una nueva clase derivada, que proporciona 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 puede considerarse una declaración de función.
Declaraciones y definiciones
En la familia de lenguajes de programación C, las declaraciones suelen agruparse en archivos de cabecera , que se incluyen en otros archivos fuente que las referencian y utilizan, pero sin acceso a la definición. La información del archivo de cabecera proporciona la interfaz entre el código que utiliza la declaración y el que la define, una forma de ocultación de información . Una declaración se utiliza a menudo 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 de compilación.
En el caso de las variables, las definiciones asignan valores a un área de memoria reservada durante la declaración. En el caso de las funciones, las definiciones proporcionan el cuerpo de la función. Si bien una variable o función puede declararse varias veces, generalmente se define una sola vez (en C++ , esto se conoce como la Regla de una Definición o ROD).
Los lenguajes dinámicos como JavaScript o Python generalmente permiten que las funciones se redefinan, es decir, se vuelvan a vincular ; una función es una variable como cualquier otra, con un nombre y un valor (la definición).
Aquí hay algunos ejemplos de declaraciones que no son definiciones, en C:
extern char example1 ; extern int example2 ; void example3 ( void );Aquí hay algunos ejemplos de declaraciones que son definiciones, nuevamente en C:
char example1 ; /* Fuera de la definición de una función, se inicializará a cero. */ int example2 = 5 ; void example3 ( void ) { /* definición entre llaves */ }Variables no definidas
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, lo que puede generar 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, la opción ` --declaración` de Perluse strict o la opción `--declaración` de Visual BasicOption Explicit ).
Véase también
Notas
- ↑ Por ejemplo, Java utiliza "declaración" (declaración de clase, declaración de método), mientras que Python utiliza "definición" (definición de clase, definición de función). [ 3 ]
- ↑ Esta distinción se observa en las "unidades" (módulos) de Pascal y en la organización del código convencional de C y C++, que tiene archivos de cabecera que consisten principalmente en declaraciones puras y archivos fuente que consisten en definiciones, aunque esto no siempre se observa estrictamente ni es impuesto por el lenguaje.
Referencias
- 1 2 3 4 "Una declaración especifica la interpretación y los atributos de un conjunto de identificadores. Una definición de un identificador es una declaración para ese identificador que:
- Para un objeto [variable o constante], hace que se reserve espacio de almacenamiento para ese objeto;
- para una función, incluye el cuerpo de la función;
- para una constante de enumeración, es la (única) declaración del identificador;
- Para un nombre de tipo typedef, es la primera (o única) declaración del identificador."
- ↑ Mike Banahan. "2.5. Declaración de variables" . GBdirect . Consultado el 8 de junio de 2011. [
Una] declaración [...] introduce solo el nombre y el tipo de algo, pero no asigna espacio de almacenamiento [...].
- ↑ 7. Sentencias compuestas , Referencia del lenguaje Python
Enlaces externos
- Declarar vs. Definir en C y C++ , Alex Allain
- 8.2. Declaraciones, definiciones y accesibilidad , El libro de la C, GBdirect
- Declaraciones y definiciones (C++) , MSDN
- "Las declaraciones le indican al compilador que existe un elemento o nombre de programa. Las definiciones especifican qué código o datos describe ese nombre."
- conceptos de lenguajes de programación