Los valores almacenados en una posición de memoria pueden ser el resultado de varios tipos de operaciones, entre ellas, las operaciones aritméticas: + (adición), - (resta), * (multiplicación), / (división) y módulo o residuo (%).
// el sistema ejecuta `1 + 2 = 3` y asigna el resultado a `suma`
var suma = 1 + 2
var resta = 4 - 3 // 1
var multiplicacion = 5 * 2 // 10
var division = 9 / 3 // 3
var modulo = 8 % 2 // 0
Inferencia de tipo de dato literal ("literal type inference")
Swift infiere el tipo de dato del número literal, ajustándolo al menos espacio requerido posible. En los ejemplos anteriores, infiere que los operandos son enteros. Luego, infiere que el resultado también es entero.
Promoción y Degradación
En Swift aplican los conceptos de "Promoción" ("Promotion") y "Degradación" ("Demotion"):
-
Promotion: Conversión automática a un tipo más grande (e.g.
charaint,floatadouble) para operar de forma más segura. -
Demotion: Conversión a un tipo más pequeño (e.g.
intashort,doubleafloat) que puede provocar la pérdica de datos ("truncation"), lo que requiere un cambio de tipo explícito ("casting") para decirle al compilador que se entienden los riesgos.
Cuando el compilador debe inferir el tipo de dato de una operación numérica con dos o más datos literales (e.g. 1 + 2.0, Int + Double), promociona el tipo de dato de menor precisión (e.g. 1: Int) al tipo de dato de mayor precisión (e.g. 1.0 : Double). Luego, procesa la operación con el tipo de dato de mayor precisión (e.g. Double).
var suma = 1 + 2.0 // 3.0
var divisionDouble = 5 / 2.0 // 2.5
var divisionEntera = 5 / 2 // 2
No solo se puede operar sobre valores escalares sino también con variables. Podemos crear nuevas variables para almacenar el resultado de una operación pero, si el valor anterior no es importante, podemos almacenar el resultado en la misma variable.
var inicial = 1
var final = inicial + 1
var temporal = 1
temporal = temporal + 1
Operador de asignación compuesta ("Augmented assignment")
Un operador de asignación compuesta es un tipo de operación que toma una variable, usa su valor como operando y vuelve a asignarle el resultado. Por ejemplo:
var suma = 1
suma = suma + 1
suma += 1
var resta = 1
resta = resta - 1
resta -= 1
var multiplicacion = 2
multiplicacion = multiplicacion * 3
multiplicacion *= 3
Operador de overflow
Cuando Swift detecta overflow en una operación entre enteros produce un error. Los operadores de overflow (&+, &-, &*) son operadores aritméticos que permiten que los enteros hagan overflow de manera deliberada, en lugar de generar un error en tiempo de ejecución, aplicando complemento a dos al resultado obtenido.
let x: UInt8 = 255
let sumaSinOverflow = x + 1 // ❌ Produce error de ejecución
let sumaConOverflow = x &+ 1 // ✅ sumaConOverflow == 0
Top comments (0)