Ir al contenido

Programación en Ada/Operadores

De Wikilibros, la colección de libros de texto de contenido libre.
← 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 and
Disyunción inclusiva or
Disyunción exclusiva xor
Relacionales Igualdad =
Desigualdad /=
Menor que <
Menor o igual que <=
Mayor que >
Mayor o igual que >=
Aditivo unario Identidad +
Negación -
Aditivo binario Suma +
Resta -
Concatenación Concatenación &
Multiplicativo Multiplicación *
División /
Módulo mod
Resto rem
De máxima precedencia Exponenciación **
Negación not
Valor absoluto 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 (, in; , 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 cortocircuito

[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]