Declaración (informática)

Una sección de código que detalla un comando específico

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. [1] 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 ) distinguen entre enunciados y definiciones/declaraciones . Una definición o declaración especifica los datos con los que debe operar un programa, mientras que un enunciado especifica las acciones que se deben realizar con esos datos.

Las afirmaciones que no pueden contener otras afirmaciones son simples ; las que pueden contener otras afirmaciones son compuestas . [2]

La apariencia de una declaración (y, en realidad, de un programa) está determinada por su sintaxis o gramática. El significado de una declaración está determinado por su semántica .

Declaraciones simples

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

  • asignación
    • Fortran:variable = expression
    • Pascal, Algol 60, Año:variable := expression;
    • C, C#, C++, PHP, Java:variable = expression;
  • llamar
    • 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;
  • ir a
    • Fortran:GOTO numbered-label
    • Algol 60:goto label;
    • C, C++, PHP, Pascal:goto label;
  • devolver
    • Fortran:RETURN value
    • C, C++, Java, PHP:return value;
  • Parar/detenerse/salir
    • Fortran:STOP number
    • C, C++:exit(expression)
    • Programa PHP:exit number;

Declaraciones compuestas

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

Notación para los siguientes ejemplos:
  • <statement> es cualquier declaración individual (puede ser simple o compuesta).
  • <secuencia> es cualquier secuencia de cero o más <declaraciones>
Algunos lenguajes de programación proporcionan una forma general de agrupar declaraciones, de modo que cualquier <declaración> individual pueda ser reemplazada por un grupo:
  • Algol 60:begin <sequence> end
  • Pascal:begin <sequence> end
  • C, PHP, Java:{ <sequence> }
Otros lenguajes 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 <sequence> end if;

Muchas sentencias compuestas son comandos de bucle o comandos de elección. En teoría, solo 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.

  • bucle controlado por conteo :
    • Algol 60:for index := 1 step 1 until limit do <statement> ;
    • Pascal:for index := 1 to limit do <statement> ;
    • C, Java:for ( index = 1; index <= limit; index += 1) <statement> ;
    • Ada:for index in 1..limit loop <sequence> end loop
    • Fortran 90:
      DO índice = 1 , límite < secuencia > FIN DO   
  • bucle controlado por condición con prueba al inicio del bucle:
    • Algol 60:for index := expression while test do <statement> ;
    • Pascal:while test do <statement> ;
    • C, Java:while (test) <statement> ;
    • Ada:while test loop <sequence> end loop
    • Fortran 90:
      DO WHILE ( prueba ) < secuencia > END DO  
  • bucle controlado por condición con prueba al final del bucle:
    • Pascal:repeat <sequence> until test; { note reversed test }
    • C, Java:do { <sequence> } while (test) ;
    • Ada:loop <sequence> exit when test; end loop;
  • bucle controlado por condición con prueba en el medio del bucle:
    • DO:do { <sequence> if (test) break; <sequence> } while (true) ;
    • Ada:loop <sequence> exit when test; <sequence> end loop;
  • Situación simple de la declaración if :
    • Algol 60:if test then <unconditional statement> ;
    • Pascal:if test then <statement> ;
    • C, Java:if (test) <statement> ;
    • Ada:if test then <sequence> end if;
    • Fortran 77+:
      SI ( prueba ) ENTONCES < secuencia > FIN SI   
  • Declaración if de doble elección:
    • Algol 60:if test then <unconditional statement> else <statement> ;
    • Pascal:if test then <statement> else <statement> ;
    • C, Java:if (test) <statement> else <statement> ;
    • Ada:if test then <sequence> else <sequence> end if;
    • Fortran 77+:
      SI ( prueba ) ENTONCES < secuencia > DE LO CONTRARIO < secuencia > FIN SI    
  • Declaración de caso/cambio con opción de elección múltiple:
    • 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 excepciones :
    • Ada:begin protected code except when exception specification => exception handler
    • Java:try { protected code } catch (exception specification) { exception handler } finally { cleanup }
    • Pitón: try: protected code except exception specification: exception handler else: no exceptions finally: cleanup

Sintaxis

Aparte de las asignaciones y las llamadas a subrutinas, la mayoría de los lenguajes comienzan cada instrucció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 las instrucciones en diferentes lenguajes; los métodos más formales tienden a ser más precisos:

  • Algol 60 utilizó la forma Backus-Naur (BNF), que estableció un nuevo nivel para la especificación de la gramática del lenguaje. [3]
  • Hasta Fortran 77, el lenguaje se describía en prosa inglesa con ejemplos. [4] A partir de Fortran 90, el lenguaje se describía utilizando una variante de BNF. [5]
  • Cobol utilizó un metalenguaje bidimensional. [6]
  • Pascal utilizó tanto diagramas de sintaxis como BNF equivalente. [7]

BNF utiliza la recursión para expresar la repetición, por lo que se han propuesto varias extensiones para permitir la indicación directa de la 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 las use como identificadores . Esto suele dar lugar a gramáticas que son más fáciles de analizar y requieren menos búsquedas anticipadas .

No hay palabras clave distinguidas

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

  • en PL/1:
    • IF IF = THEN THEN ... (la segunda IFy la primera THENson variables).
  • En Fortran:
    • IF (A) X = 10... declaración condicional (con otras variantes)
    • IF (A) = 2 asignación a una variable subíndice denominadaIF
Como los espacios eran opcionales hasta Fortran 95, un error tipográfico podía cambiar por completo el significado de una declaración:
  • DO 10 I = 1,5 Inicio de un bucle con I corriendo del 1 al 5
  • DO 10 I = 1.5 asignación del valor 1,5 a la variableDO10I

Palabras marcadas

En Algol 60 y Algol 68, se distinguieron explícitamente los tokens especiales: para publicación, en negrita, por ejemplo begin; para programación, con alguna marca especial, por ejemplo, una bandera ( 'begin), comillas ( 'begin') o subrayado ( beginen Elliott 503 ). Esto se llama "afilado".

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 pueden usarse como nombres definidos por el programador. La mayoría de los lenguajes de programación más populares usan palabras clave reservadas. Algunos ejemplos tempranos incluyen FLOW-MATIC (1953) y COBOL (1959). Desde 1970, otros ejemplos incluyen Ada, C, C++, Java y Pascal. La cantidad de palabras reservadas depende del lenguaje: C tiene aproximadamente 30, mientras que COBOL tiene aproximadamente 400.

Semántica

La semántica se ocupa del significado de un programa. Los documentos de estándares para muchos lenguajes de programación utilizan 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 utilizando ejemplos y prosa en inglés. Esto puede resultar en ambigüedad. [8] En algunas descripciones de lenguaje, el significado de declaraciones compuestas se define mediante el uso de construcciones "más simples", por ejemplo, un bucle while se puede definir mediante una combinación de pruebas, saltos y etiquetas , utilizando ify goto.

El artículo sobre semántica describe varios formalismos matemáticos/lógicos que se han utilizado para especificar la semántica de forma precisa; estos son generalmente más complicados que el BNF y no existe un único enfoque que se acepte como el camino a seguir. Algunos enfoques definen de forma efectiva un intérprete para el lenguaje, otros utilizan la lógica formal para razonar sobre un programa, algunos añaden afijos a las entidades sintácticas para garantizar la coherencia, etc.

Expresiones

A menudo se hace una distinción entre las sentencias, que se ejecutan, y las expresiones , que se evalúan. Las expresiones siempre dan un valor, a diferencia de las sentencias. Sin embargo, las expresiones suelen usarse como parte de una sentencia más grande.

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, mientras que la expresión evalúa a un valor, la declaración completa no lo hace (el valor de la expresión se descarta). Por ejemplo, en C, C++, C# y muchos lenguajes similares, x = y + 1es una expresión que establecerá x al valor de y más uno, y la expresión completa en sí misma evaluará al mismo valor que x. Sin embargo, x = y + 1;(observe el punto y coma al final) es una declaración que aún establecerá x al valor de y más uno porque la expresión dentro de la declaración aún se evalúa, pero el resultado de la expresión se descarta y la declaración en sí no evalúa a ningún valor. [9]

Las expresiones también pueden estar contenidas dentro de otras expresiones. Por ejemplo, la expresión x = y + 1contiene la expresión y + 1, que a su vez contiene los valores yy 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 solo un separador en la declaración de asignación. Aunque Python permite múltiples asignaciones ya que cada asignación es una expresión, este es simplemente un caso especial de la declaración de asignación incorporada en la gramática del lenguaje en lugar de una expresión verdadera. [10]

Extensibilidad

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

Véase también

Referencias

  1. ^ "declaración". Webopedia. Septiembre de 1996. Consultado el 3 de marzo de 2015 .
  2. ^ Backus, JW; Bauer, Florida; Verde, J.; Katz, C.; McCarthy, J.; Naur, P.; Perlis, AJ; Rutishauser, H.; Samuelson, K.; Vauquois, B.; Wegstein, JH; van Wijngaarden, A.; Woodger, M. Naur, Peter (ed.). "Informe revisado sobre el lenguaje algorítmico Algol 60". masa:trabajo . Sección "4.1" . Consultado el 23 de enero de 2021 .
  3. ^ Backus, JW; Bauer, Florida; Verde, J.; Katz, C.; McCarthy, J.; Naur, P.; Perlis, AJ; Rutishauser, H.; Samuelson, K.; Vauquois, B.; Wegstein, JH; van Wijngaarden, A.; Woodger, M. Naur, Peter (ed.). "Informe revisado sobre el lenguaje algorítmico Algol 60". masa:trabajo . Sección "1.1" . Consultado el 23 de enero de 2021 .
  4. ^ "FORTRAN" (PDF) . Instituto de Normas de los Estados Unidos de América. 1966 . Consultado el 19 de febrero de 2021 – a través de WG5 Fortran Standards.
  5. ^ "Borrador de trabajo J3/04-007" (PDF) . J3 Fortran. 10 de mayo de 2004. Consultado el 19 de febrero de 2021 .
  6. ^ "Manual de referencia de programación ASCII COBOL" (PDF) . unisys. Junio ​​de 2010 . Consultado el 23 de enero de 2021 .
  7. ^ Jensen, Kathleen; Wirth, Niklaus (1974). Goos, G.; Hartmanis, J. (eds.). "PASCAL User Manual and Report" (PDF) . Apuntes de clase en informática . Apéndice D . Consultado el 19 de febrero de 2021 .
  8. ^ Knuth, DE (julio de 1967). "Los puntos problemáticos restantes en Algol 60" (PDF) . La familia ALGOL . Consultado el 24 de febrero de 2021 .
  9. ^ "ISO/IEC 9899:1999 (E)" (PDF) . ISO/IEC . Archivado (PDF) del original el 7 de febrero de 2024.
  10. ^ "7. Declaraciones simples". Documentación de Python 3.10.8 .
  • ENCICLOPEDIA DE PC: Definición de: declaración del programa
Obtenido de "https://es.wikipedia.org/w/index.php?title=Declaración_(ciencia_informática)&oldid=1242910237"