Expresiones
Una expresión es una combinación de operadores y operandos de cuya evaluación se obtiene un valor. Los operandos pueden ser nombres que denoten objetos variables o constantes, funciones, literales de cualquier tipo adecuado de acuerdo con los operadores u otras expresiones más simples. La evaluación de una expresión da lugar a un valor de algún tipo, una expresión se dice que es deltipo de su resultado. Ejemplos de expresiones:
a + 5*b
(a >= 0) and ((b+5) > 10)
a
-a * 2 + b
-b + sqrt(b**2 - 4*a*c)
length(s) > 0
Las expresiones se evalúan de acuerdo con la precedencia de los operadores. Ante una secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de escritura, de izquierda a derecha. El orden de evaluación puede modificarse usandoparéntesis.
Operadores.
Ada agrupa los operadores en 6 categorías, de menor a mayor precedencia. Los operadores binarios se usan en formato infijo (
Operadores lógicos.
Están predefinidos para cualquier tipo, T, que designe un booleano, modular oun array monodimensional de componentes booleanos:
function "and"(Left, Right : T) return T
function "or" (Left, Right : T) return T
function "xor"(Left, Right : T) return T
Ejemplo de uso en expresiones (sean A, B y C de tipo T):
if A and B then ...
C := A or B;
return (A xor B);
Su significado es el convencional (para los tipos modulares son operaciones bit a bit):
A
B
(A and B)
(A or B)
(A xor B)True
True
False
False
True
False
True
False
True
False
False
False
True
True
True
False
False
True
True
False
Para los tipos booleanos, existen versiones de los operadores "and" y "or", llamadas "and then" y "or else" que tienen el mismo significado, pero realizan una "evaluación en cortocircuito" consistente en que evalúan siempre primero el operando izquierdo y, si el valor de éste essuficiente para determinar el resultado, no evalúan el operando derecho.
La evaluación en cortocircuito resulta muy útil si la correcta evaluación del operando derecho depende del valor del operando izquierdo, como en el siguiente ejemplo:
if i <= Vec'last and then Vec(i) > 0 then ...
(Evaluar Vec(i) produciría un error si i tiene un valor superior al límite máximo del vector).
Operadoresrelacionales.
Los operadores de igualdad están predefinidos para todos los tipos no limitados. Sea T un tipo con estas características:
function "=" (Left, Right : T) return Boolean
function "/="(Left, Right : T) return Boolean
Los operadores de ordenación están predefinidos para todos los tipos escalares y los arrays de elementos discretos. Sea T un tipo con estas características:
function "<" (Left,Right : T) return Boolean
function "<="(Left, Right : T) return Boolean
function ">" (Left, Right : T) return Boolean
function ">="(Left, Right : T) return Boolean
Existe también un operador de pertenencia ("in", "not in") que determina si un valor pertenece a un rango o a un subtipo: if i in 1..10 then ...
Todos los operadores relacionales devuelven un resultado de tipo Boolean.
Ejemplo de uso en expresiones (sean A, B de tipo T y C de tipo Boolean):
if A = B then ...
C := (A <= B);
return (A >= B);
Operadores binarios de adición.
Los operadores de adición predefinidos para cualquier tipo numérico, T, son:
function "+"(Left, Right : T) return T
function "–"(Left, Right : T) return T
Ejemplo de uso en expresiones (sean A, B y C de tipo T):
C := A + B;
return (A - B);
También pertenecena esta categoría los operadores de concatenación, predefinidos para cualquier tipo de array monodimensional no limitado, T, de elementos de tipo C:
function "&"(Left : T; Right : T) return T
function "&"(Left : T; Right : C) return T
function "&"(Left : C; Right : T) return T
function "&"(Left : C; Right : C) return T
Operadores unarios de adición.
Los operadores unarios de adición...
Regístrate para leer el documento completo.