Programación en Ada/Operadores

De Wikilibros, la colección de libros de texto de contenido libre.
Saltar a: navegación, buscar
← Expresiones Operadores Sentencias y estructuras de control →


Clasificación[editar]

Ésta es la lista de operadores de Ada de menor a mayor precedencia.

Clasificación de operadores
Clase Nombre Fórmula Sintáxis Ada
Lógicos Conjunción x \land y and
Disyunción inclusiva x \lor y or
Disyunción exclusiva (x \land \bar{y}) \lor (\bar{x} \land y) xor
Relacionales Igualdad x = y =
Desigualdad x \ne y /=
Menor que x<y <
Menor o igual que x \le y <=
Mayor que x > y >
Mayor o igual que x \ge y >=
Aditivo unario Identidad +x +
Negación -x -
Aditivo binario Suma x + y +
Resta x - y -
Concatenación Concatenación &
Multiplicativo Multiplicación x \times y *
División \begin{matrix} \frac{x}{y} \end{matrix} /
Módulo x \bmod y mod
Resto rem
De máxima precedencia Exponenciación x^y **
Negación \lnot x not
Valor absoluto |x| abs

Propiedades[editar]

En todos los casos, excepto para la exponenciación, los dos operandos deben ser del mismo tipo.

Los operadores se pueden sobrecargar.

Comprobación de pertenencia (in, not in)[editar]

Además existe la comprobación de pertenencia ( x \in T, in;  x \notin T, not in) que técnicamente no es un operador y no se puede sobrecargar. Su precedencia es la misma que la de los operadores relacionales. Se puede utilizar con rangos o con subtipos.

-- Supongamos que X es de tipo Integer
if X in Positive then -- Positive es un subtipo de Integer
   ...
   if X not in 4 .. 6 then
      ...
   end if;
end if;
declare
   type Dia_Semana is
      (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo);
   subtype Dia_Laborable is Dia_Semana range Lunes .. Viernes;
   Hoy : Dia_Semana := Obtener_Dia;
begin

   if Hoy in Dia_Laborable then -- Dia_Laborable es un subtipo de Dia_Semana
      Ir_Al_Trabajo;
      if Hoy not in Lunes .. Miercoles then
         Pensar_En_El_Fin_De_Semana;
      end if;
   end if;
end;

Operadores lógicos de corto-circuito[editar]

Para los operadores lógicos existen versiones para minimizar las evaluaciones (short-circuit evaluation). Es decir, se evalúa primero el operando de la izquierda y después, sólo si es necesario para determinar el resultado, el de la derecha:

  • Conjunción and then: no se evalúa la segunda expresión si la primera es falsa porque ya sabemos que el resultado será falso.
  • Disyunción inclusiva or else: no se evalúa la segunda expresión si la primera es verdadera porque ya sabemos que el resultado será verdadero.
-- B / A > 3 no se ejecutará si A es 0 lo que nos será útil para evitar
-- un Constraint_Error
-- 
if A /= 0 and then
   B / A > 3 then

   Put_Line ("B / A es mayor que 3");

end if;

Manual de referencia de Ada[editar]