En Swift, el range matching se utiliza a menudo en switch-case para comparar valores con rangos. Para esto se utilizan los operadores ..< (rango semi-abierto) y ... (rango cerrado):
let score = 76 switch score { case 0..<60: print("Insatisfactorio") case 60..<80: print("Satisfactorio") case 80...100: print("Excelente") default: print("Valor no válido") }
Aspectos a considerar:
¿Qué sucederá si en switch se utiliza un rango con un límite superior que no incluye el valor (por ejemplo, 0..<5) y la variable es igual a 5?
A menudo se responde que tal case funcionará, pero esto es incorrecto: el operador ..< no incluye el límite superior. Ejemplo:
let value = 5 switch value { case 0..<5: print("0-4") case 5: print("cinco") default: print("otro") } // Imprimirá: "cinco"
Historia
Un desarrollador implementó la visualización de puntos de usuario por rangos, utilizando un rango cerrado donde el límite derecho estaba por encima del valor máximo posible. Esto provocó que algunos valores cayeran en dos intervalos, haciendo que la lógica funcionara incorrectamente.
Historia
En la aplicación se utilizó switch-case con rangos, donde uno de los valores no entró en ningún rango debido al uso incorrecto del operador (por ejemplo, 0...10 y 11...20 — el valor 10.5 no cayó en ninguno). El bug fue descubierto solo en producción.
Historia
En el código del servicio se compararon fechas a través de range matching, utilizando el half-open range incorrectamente: la fecha final no se incluía, resultando en la exclusión de intervalos correctos, lo que llevó a la imposibilidad de reservar la fecha en el último día permitido.