stringtranslate.com

Declaración (programación informática)

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.

Declaración vs. definición

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ó en el lenguaje la expresión lambda, que podía verse como una declaración de función.

Declaraciones y definiciones

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 */ }         

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, que puede dar lugar a un mensaje de diagnóstico. Algunos lenguajes comenzaron con el comportamiento de la declaración implícita, pero a medida que maduraron, proporcionaron una opción para deshabilitarla (por ejemplo, " " de Perluse strict o " " de Visual BasicOption Explicit ).

Véase también

Notas

  1. ^ Por ejemplo, Java usa "declaración" (declaración de clase, declaración de método), mientras que Python usa "definición" (definición de clase, definición de función). [3]
  2. ^ Esta distinción se observa en las "unidades" (módulos) de Pascal, y en la organización de código convencional de C y C++, que tiene archivos de encabezado que consisten en gran parte en declaraciones puras, y archivos fuente que consisten en definiciones, aunque esto no siempre se observa estrictamente, ni el lenguaje lo aplica.

Referencias

  1. ^ abcd "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 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 definido, es la primera (o única) declaración del identificador".
    Especificación C11, 6.7: Declaraciones, párrafo 5.
  2. ^ Mike Banahan. "2.5. Declaración de variables". GBdirect . Consultado el 8 de junio de 2011. [Una] declaración [...] introduce sólo el nombre y el tipo de algo, pero no asigna espacio de almacenamiento [...].
  3. ^ 7. Declaraciones compuestas, Referencia del lenguaje Python

Enlaces externos