Programación en Ada/Operadores
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
editarEn 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)
editarAdemá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
Xin
Positivethen
-- Positive es un subtipo de Integer
...if
Xnot
in
4 .. 6then
...end
if
;end
if
;
declare
type
Dia_Semanais
(Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo);subtype
Dia_Laborableis
Dia_Semanarange
Lunes .. Viernes; Hoy : Dia_Semana := Obtener_Dia;begin
if
Hoyin
Dia_Laborablethen
-- Dia_Laborable es un subtipo de Dia_Semana
Ir_Al_Trabajo;if
Hoynot
in
Lunes .. Miercolesthen
Pensar_En_El_Fin_De_Semana;end
if
;end
if
;end
;
Operadores lógicos de cortocircuito
editarPara 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 /= 0and
then
B / A > 3then
Put_Line ("B / A es mayor que 3"
);end
if
;