Programación en Ada/Operadores
Ir a la navegación
Ir a la búsqueda
Clasificación[editar]
Ésta es la lista de operadores de Ada de menor a mayor precedencia.
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;