스위프트에서 범위 매칭은 switch-case에서 값을 범위와 비교하는 데 자주 사용됩니다. 이를 위해 ..< (half-open range)와 ... (closed range) 연산자를 사용합니다:
let score = 76 switch score { case 0..<60: print("미흡") case 60..<80: print("양호") case 80...100: print("우수") default: print("잘못된 값") }
특징:
만약 switch에서 상한이 포함되지 않는 범위(예: 0..<5)를 사용하고 변수의 값이 5라면 어떻게 될까요?
종종 해당 case가 작동할 것이라고 대답하지만 이는 잘못된 답변입니다: ..< 연산자는 상한을 포함하지 않습니다. 예:
let value = 5 switch value { case 0..<5: print("0-4") case 5: print("다섯") default: print("기타") } // 출력: "다섯"
이야기
개발자는 사용자의 점수를 범위에 따라 표현하기 위해 상한이 최대 값보다 높은 닫힌 범위를 사용하여 구현했습니다. 이로 인해 일부 값이 두 개의 구간에 모두 포함되어 로직이 올바르게 작동하지 않았습니다.
이야기
어플리케이션에서 범위를 사용한 switch-case가 있었고, 값 중 하나가 잘못된 연산자 사용(예: 0...10과 11...20 — 값 10.5가 어디에도 포함되지 않음)으로 인해 아무 범위에도 포함되지 않았습니다. 버그는 프로덕션에서만 발견되었습니다.
이야기
서비스 코드에서 날짜를 범위 매칭을 통해 비교했으나 half-open range를 잘못 사용하여 종료 날짜가 포함되지 않아 올바른 간격이 걸러져 마지막 유효 날짜의 예약이 불가능했습니다.