Programación en Ada/Operadores
Apariencia
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
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
[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 /= 0and
then
B / A > 3then
Put_Line ("B / A es mayor que 3"
);end
if
;