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 IntegerifXinPositivethen-- Positive es un subtipo de Integer...ifXnotin4 .. 6then...endif;endif;
declaretypeDia_Semanais(Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo);subtypeDia_LaborableisDia_SemanarangeLunes .. Viernes; Hoy : Dia_Semana := Obtener_Dia;beginifHoyinDia_Laborablethen-- Dia_Laborable es un subtipo de Dia_SemanaIr_Al_Trabajo;ifHoynotinLunes .. MiercolesthenPensar_En_El_Fin_De_Semana;endif;endif;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
andthen: no se evalúa la segunda expresión si la primera es falsa porque ya sabemos que el resultado será falso. - Disyunción inclusiva
orelse: 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--ifA /= 0andthenB / A > 3thenPut_Line ("B / A es mayor que 3");endif;