In Swift ondersteunt de switch-constructie uitgebreide pattern matching: je kunt where gebruiken om voorwaarden toe te voegen aan afzonderlijke cases. Dit maakt het mogelijk om complexe zakelijke logica en filtering te implementeren.
Voorbeeld:
enum Person { case student(score: Int) case teacher(specialty: String) } let people = [Person.student(score: 95), Person.teacher(specialty: "Math"), Person.student(score: 65)] for person in people { switch person { case .student(let score) where score > 90: print("Uitblinker met score \(score)") case .teacher(let specialty): print("Docent van het vak: \(specialty)") default: print("Andere case") } }
Het gebruik van where verhoogt de leesbaarheid en voorkomt duplicatie van code, maar te complexe voorwaarden kunnen de ondersteuning bemoeilijken, en pattern matching met geassocieerde waarden vereist strikte controle over de volgorde van cases.
Vraag: "Is het noodzakelijk om bij pattern matching met where in switch variabelen met unieke namen in elke case aan te roepen?"
Antwoord: Nee, maar het wordt aanbevolen om verwarring te voorkomen. Als je dezelfde variabelenamen in verschillende cases gebruikt, is de context beperkt tot de overeenkomstige case, maar eenzelfde naam kan de leesbaarheid en onderhoudbaarheid van de code belemmeren.
Voorbeeld:
switch value { case .status(let code) where code == 200: print("OK") case .status(let code) where code == 404: print("Niet gevonden")
Verhaal 1
In een bancaire applicatie was er een sectie voor statusanalyse met meerdere where-voorwaarden. Door een gemiste break en een onjuiste volgorde van cases ontstond een situatie waarin een specifieke case niet werd verwerkt, waardoor gebruikers geen volledige status van de operaties zagen. De fout werd pas ontdekt tijdens veldtesten.
Verhaal 2
In het autorisatiesysteem gebruikte de ontwikkelaar dezelfde namen voor variabelen in verschillende cases, wat leidde tot verwarring en een bug: in de tweede case probeerde men een variabele te gebruiken die in een andere case was gedefinieerd. De build werkte, maar incorrect in bepaalde scenario's.
Verhaal 3
In complexe pattern matching met where werd niet opgemerkt dat default een deel van de combinaties van geassocieerde enums niet zou verwerken, waardoor de applicatie crashte met de foutmelding pattern matching failed. Het probleem werd pas opgemerkt bij de integratie van nieuwe datatypes in de toekomst.