ProgramaciónDesarrollador Swift

¿Cómo funciona el pattern matching para rangos en Swift y qué aspectos deben tenerse en cuenta al implementar comparaciones con switch?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

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:

  • Los rangos deben ser crecientes: de menor a mayor (de lo contrario, el rango estará vacío).
  • El matching será exitoso si el valor está dentro del rango.
  • Dado que los rangos son estructuras, se pueden usar para hacer matching con cualquier tipo Comparable.

Pregunta capciosa

¿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"

Ejemplos de errores reales por desconocer los puntos finos del tema


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.