Declaración (informática)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En programación informática, una declaración es una unidad sintáctica de un lenguaje de programación imperativo que expresa alguna acción a realizar. Un programa escrito en dicho lenguaje está formado por una secuencia de una o más declaraciones. Una declaración puede tener componentes internos (por ejemplo, expresiones).

Muchos lenguajes de programación (por ejemplo, Ada, Algol 60, C, Java, Pascal) hacen una distinción entre declaraciones y definiciones/declaraciones. Una definición o declaración especifica los datos sobre los cuales operará un programa, mientras que una declaración especifica las acciones que se tomarán con esos datos.

Las declaraciones que no pueden contener otras declaraciones son simples; aquellas que pueden contener otras afirmaciones son compuestas.

La aparición de una declaración (y de hecho un programa) se determina por su sintaxis o gramática. El significado de una declaración está determinado por su semántica.

Declaraciones simples

Las declaraciones simples son completas en sí mismas; estos incluyen asignaciones, llamadas a subrutinas y algunas declaraciones que pueden afectar significativamente el flujo de control del programa (por ejemplo, ir a, regresar, detener/detener). En algunos lenguajes, la entrada y salida, las afirmaciones y las salidas se manejan mediante declaraciones especiales, mientras que otros lenguajes usan llamadas a subrutinas predefinidas.

  • asignación
    • Fortran: variable = expression
    • Pascal, Algol 60, Ada: variable:= expression;
    • C, C#, C++, PHP, Java: variable = expression;
  • llamada
    • Fortran: CALL subroutine name(parameters)
    • C, C++, Java, PHP, Pascal, Ada: subroutine name(parameters);
  • afirmación
    • C, C++, PHP: assert(relational expression);
    • Java: assert relational expression;
  • Goto
    • Fortran: GOTO numbered-label
    • Algol 60: goto label;
    • C, C++, PHP, Pascal: goto label;
  • Regreso
    • Fortran: RETURN value
    • C, C++, Java, PHP: return value;
  • stop/halt/exit
    • Fortran: STOP number
    • C, C++: exit(expression)
    • PHP: exit number;

Declaraciones compuestas

Las declaraciones compuestas pueden contener (secuencias de) declaraciones, anidables a cualquier profundidad razonable, y generalmente implican pruebas para decidir si obedecer o repetir estas declaraciones contenidas.

Nota para los siguientes ejemplos:
  • No se puede decir nada (puede ser simple o compuesto).
  • Secuencialidad es cualquier secuencia de cero o más
Algunos lenguajes de programación proporcionan una forma general de agrupar las declaraciones juntas, de modo que cada uno de los puede ser reemplazado por un grupo:
  • Algol 60: begin end
  • Pascal: begin end
  • C, PHP, Java: { }
Otros idiomas de programación tienen un terminador especial diferente en cada tipo de declaración compuesta, de modo que una o más declaraciones se tratan automáticamente como un grupo:
  • Ada: if test then end if;

Muchas declaraciones compuestas son comandos de bucle o comandos de elección. En teoría sólo se requiere uno de cada uno de estos tipos de comandos. En la práctica hay varios casos especiales que ocurren con bastante frecuencia; Estos pueden hacer que un programa sea más fácil de entender, pueden facilitar la programación y, a menudo, pueden implementarse de manera mucho más eficiente. Hay muchas sutilezas que no se mencionan aquí; consulte los artículos vinculados para obtener más detalles.

  • Loop controlado por el conteo:
    • Algol 60: for index:= 1 step 1 until limit do ;
    • Pascal: for index:= 1 to limit do ;
    • C, Java: for (index = 1; index <= limit; index += 1) ;
    • Ada: for index in 1..limit loop end loop
    • Fortran 90:
      Sí. índice = 1,límite c)secuenciaFIN DO
  • lazo controlado por la afección con prueba al inicio del lazo:
    • Algol 60: for index:= expression while test do ;
    • Pascal: while test do ;
    • C, Java: while (test) ;
    • Ada: while test loop end loop
    • Fortran 90:
      Hágalo. ()prueba) c)secuenciaFIN DO
  • bucle controlado por la afección con prueba al final del bucle:
    • Pascal: repeat until test; { note reversed test}
    • C, Java: do { } while (test);
    • Ada: loop exit when test; end loop;
  • lazo controlado por la afección con prueba en el centro del lazo:
    • C: do { if (test) break; } while (true);
    • Ada: loop exit when test; end loop;
  • situación simple:
    • Algol 60:if test then ;
    • Pascal:if test then ;
    • C, Java: if (test) ;
    • Ada: if test then end if;
    • Fortran 77+:
      IF ()prueba) Entonces c)secuenciaFIN IF
  • if-statement two-way choice:
    • Algol 60:if test then else ;
    • Pascal:if test then else ;
    • C, Java: it (test) else ;
    • Ada: if test then else end if;
    • Fortran 77+:
      IF ()prueba) Entonces c)secuenciaELSE c)secuenciaFIN IF
  • caso/switch declaración opción multi-way:
    • Pascal: case c of 'a': alert(); 'q': quit(); end;
    • Ada: case c is when 'a' => alert(); when 'q' => quit(); end case;
    • C, Java: switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
  • Manejo de excepción:
    • Ada: begin protected code except when exception specification => exception handler
    • Java: try { protected code } catch (exception specification) { exception handler } finally { cleanup }
    • Python: try: protected code except exception specification: exception handler else: no exceptions finally: cleanup

Sintaxis

Aparte de las asignaciones y llamadas a subrutinas, la mayoría de los lenguajes comienzan cada declaración con una palabra especial (por ejemplo, goto, if, while, etc.), como se muestra en los ejemplos anteriores. Se han utilizado varios métodos para describir la forma de declaraciones en diferentes idiomas; los métodos más formales tienden a ser más precisos:

  • Algol 60 utiliza la forma Backus-Naur (BNF) que establece un nuevo nivel para la especificación de gramática del lenguaje.
  • Hasta Fortran 77, el idioma fue descrito en la prosa inglesa con ejemplos, A partir de Fortran 90, el idioma fue descrito usando una variante de BNF.
  • Cobol usó un metalanguage bidimensional.
  • Pascal utilizó ambos diagramas de sintaxis y BNF equivalente.

BNF utiliza la recursividad para expresar repetición, por lo que se han propuesto varias extensiones para permitir la indicación directa de repetición.

Declaraciones y palabras clave

Algunas gramáticas de lenguajes de programación reservan palabras clave o las marcan especialmente y no permiten que se utilicen como identificadores. Esto a menudo conduce a gramáticas que son más fáciles de analizar y requieren menos anticipación.

No hay palabras clave distinguidas

Fortran y PL/1 no tienen palabras clave reservadas, lo que permite declaraciones como:

  • in PL/1:
    • IF IF = THEN THEN... (el segundo) IF y el primero THEN son variables).
  • en Fortran:
    • IF (A) X = 10... declaración condicional (con otras variantes)
    • IF (A) = 2 asignación a una variable subscripta llamada IF
Como los espacios eran opcionales hasta Fortran 95, un tipo podría cambiar completamente el significado de una declaración:
  • DO 10 I = 1,5 inicio de un bucle con que corro de 1 a 5
  • DO 10 I = 1.5 asignación del valor 1.5 a la variable DO10I

Palabras marcadas

En Algol 60 y Algol 68, las fichas especiales se distinguían explícitamente: para publicación, en negrita, p. comenzar; para programación, con alguna marca especial, por ejemplo, una bandera ('begin), comillas ('begin') o subrayado (comienza en Elliott 503). Esto se llama "acelerar".

Por lo tanto, los tokens que forman parte de la sintaxis del lenguaje no entran en conflicto con los nombres definidos por el programador.

Palabras clave reservadas

Ciertos nombres están reservados como parte del lenguaje de programación y no se pueden utilizar como nombres definidos por el programador. La mayoría de los lenguajes de programación más populares utilizan palabras clave reservadas. Los primeros ejemplos incluyen FLOW-MATIC (1953) y COBOL (1959). Desde 1970, otros ejemplos incluyen Ada, C, C++, Java y Pascal. El número de palabras reservadas depende del idioma: C tiene unas 30 mientras que COBOL tiene unas 400.

Semántica

La semántica se ocupa del significado de un programa. Los documentos estándar para muchos lenguajes de programación usan BNF o algún equivalente para expresar la sintaxis/gramática de una manera bastante formal y precisa, pero la semántica/significado del programa generalmente se describe usando ejemplos y prosa en inglés. Esto puede resultar en ambigüedad. En algunas descripciones de idiomas, el significado de declaraciones compuestas se define mediante el uso de expresiones "más simples". construcciones, p.e. Un bucle while se puede definir mediante una combinación de pruebas, saltos y etiquetas, usando if y goto.

El artículo sobre semántica describe varios formalismos matemáticos/lógicos que se han utilizado para especificar la semántica de manera precisa; Estos son generalmente más complicados que BNF y no se acepta generalmente ningún enfoque único como el camino a seguir. Algunos enfoques definen efectivamente un intérprete para el lenguaje, algunos usan lógica formal para razonar sobre un programa, algunos adjuntan afijos a entidades sintácticas para garantizar la coherencia, etc.

Expresiones

A menudo se hace una distinción entre declaraciones, que se ejecutan, y expresiones, que se evalúan. Las expresiones siempre se evalúan como un valor, mientras que las declaraciones no. Sin embargo, las expresiones se utilizan a menudo como parte de una declaración más amplia.

En la mayoría de los lenguajes de programación, una declaración puede consistir en poco más que una expresión, generalmente siguiendo la expresión con un terminador de declaración (punto y coma). En tal caso, aunque la expresión se evalúa como un valor, la declaración completa no (el valor de la expresión se descarta). Por ejemplo, en C, C++, C# y muchos lenguajes similares, x = y + 1 es una expresión que establecerá x en el valor de y más uno, y toda la expresión en sí se evaluará como el mismo valor que se establece en x. Sin embargo, x = y + 1; (tenga en cuenta el punto y coma al final) es una declaración que aún establecerá x en el valor de y más uno porque la expresión dentro de la declaración aún se evalúa, pero el El resultado de la expresión se descarta y la declaración en sí no se evalúa con ningún valor.

Las expresiones también pueden estar contenidas dentro de otras expresiones. Por ejemplo, la expresión x = y + 1 contiene la expresión y + 1, que a su vez contiene los valores y y 1. , que también son técnicamente expresiones.

Aunque los ejemplos anteriores muestran expresiones de asignación, algunos lenguajes no implementan la asignación como una expresión, sino como una declaración. Un ejemplo notable de esto es Python, donde = no es un operador, sino simplemente un separador en la declaración de asignación. Aunque Python permite múltiples asignaciones ya que cada asignación era una expresión, este es simplemente un caso especial de la declaración de asignación integrada en la gramática del lenguaje en lugar de una expresión verdadera.

Extensibilidad

La mayoría de los lenguajes tienen un conjunto fijo de declaraciones definidas por el idioma, pero se han realizado experimentos con lenguajes extensibles que permiten al programador definir nuevas declaraciones.

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save