ProgrammatieSwift-ontwikkelaar

Hoe werkt pattern matching voor ranges in Swift en welke bijzonderheden moet je in overweging nemen bij het implementeren van vergelijking met behulp van switch?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

In Swift wordt range matching vaak gebruikt in switch-case om waarden te vergelijken met bereiken. Hiervoor worden de operatoren ..< (half-open range) en ... (closed range) gebruikt:

let score = 76 switch score { case 0..<60: print("Onvoldoende") case 60..<80: print("Voldoende") case 80...100: print("Uitstekend") default: print("Ongeldige waarde") }

Bijzonderheden:

  • Bereiken moeten oplopend zijn: van lager naar hoger (anders is de range leeg).
  • matching is succesvol als de waarde binnen het bereik ligt.
  • Aangezien bereiken structuren zijn, kunnen ze worden gebruikt voor matching met elke Comparable type.

Vraag met een val

Wat gebeurt er als je in switch een bereik gebruikt met een bovengrens die de waarde niet omvat (bijvoorbeeld, 0..<5), en de variabele is gelijk aan 5?

Vaak wordt geantwoord dat die case zal werken, maar dit is onjuist: de operator ..< omvat de bovengrens niet. Voorbeeld:

let value = 5 switch value { case 0..<5: print("0-4") case 5: print("vijf") default: print("ander") } // Geeft weer: "vijf"

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp


Verhaal

Een ontwikkelaar implementeerde de weergave van de gebruikerscores via bereiken, waarbij de gesloten range een rechtergrens had die hoger was dan de maximaal mogelijke waarde. Dit leidde ertoe dat sommige waarden in twee segmenten vielen en de logica niet correct werkte.


Verhaal

In de applicatie werd switch-case gebruikt met bereiken, waarbij een van de waarden niet in een enkel bereik viel door verkeerd gebruik van de operator (bijvoorbeeld, 0...10 en 11...20 — en de waarde 10.5 viel nergens). De bug werd pas op productie ontdekt.


Verhaal

In de code van de service werden datums vergeleken via range matching, waarbij de half-open range verkeerd werd gebruikt: de einddatum werd niet inbegrepen, waardoor correcte intervallen werden uitgesloten, wat leidde tot de onmogelijkheid om de datum op de laatste toegestane dag te boeken.