In Swift, il range matching è spesso utilizzato in switch-case per confrontare i valori con i range. Per questo si utilizzano gli operatori ..< (half-open range) e ... (closed range):
let score = 76 switch score { case 0..<60: print("Insufficiente") case 60..<80: print("Sufficiente") case 80...100: print("Ottimo") default: print("Valore non valido") }
Caratteristiche:
Cosa succede se si utilizza un range con un limite superiore che non include il valore (ad esempio, 0..<5), e la variabile è uguale a 5?
Molti rispondono che quel case funzionerà, ma non è corretto: l'operatore ..< non include il limite superiore. Esempio:
let value = 5 switch value { case 0..<5: print("0-4") case 5: print("cinque") default: print("altro") } // Mostrerà: "cinque"
Storia
Un sviluppatore ha implementato la visualizzazione dei punteggi degli utenti per range, utilizzando un closed range, dove il limite destro era superiore al valore massimo possibile. Questo portava alcuni valori a cadere in due intervalli, causando un'errata logica.
Storia
Nell'app, veniva utilizzato switch-case con range, dove uno dei valori non rientrava in nessun range a causa di un uso errato dell'operatore (ad esempio, 0...10 e 11...20 — ma il valore 10.5 non rientrava). Il bug è stato scoperto solo in produzione.
Storia
Nel codice del servizio sono state confrontate date tramite range matching, utilizzando in modo errato il half-open range: la data finale non era inclusa, portando all'esclusione di intervalli validi, e rendendo impossibile la prenotazione della data nell'ultimo giorno consentito.