switch 문이 모든 경우를 빠짐없이 처리하지 못하고 있어요
switch 문이 모든 경우를 빠짐없이 처리하지 못하고 있어요
exhaustive(완전한) 타입을 switch 로 분기할 때, 통과할 수 있는 가능한 값들 중 하나 이상에 대한 case 가 빠져 있으면 분석기가 알려주는 진단이에요.
본문
exhaustive 타입을 switch 문으로 분기하는데, 그 타입을 통과할 수 있는 가능한 값들 중 하나 이상에 대한 case 가 빠져 있으면 이 진단이 발생해요.
아래 코드는 switch 문에 값 E.three 에 대한 case 가 없는데, E 가 exhaustive 타입이기 때문에 이 진단이 나와요.
enum E { one, two, three }
void f(E e) {
switch (e) {
case E.one:
case E.two:
}
}
고치는 방법
현재 매칭되지 않는 각 상수에 대해 case 를 하나씩 추가해 주면 돼요.
enum E { one, two, three }
void f(E e) {
switch (e) {
case E.one:
case E.two:
break;
case E.three:
}
}
빠진 값들을 매칭할 필요가 없다면, default 절이나 와일드카드 패턴을 추가하면 돼요.
enum E { one, two, three }
void f(E e) {
switch (e) {
case E.one:
case E.two:
break;
default:
}
}
다만 주의할 점이 있어요. default 절이나 와일드카드 패턴을 추가하면 그 exhaustive 타입에 나중에 추가되는 어떤 값도 함께 처리되게 돼요. 그래서 '이 switch 를 갱신해야 한다'는 컴파일러의 경고 능력을 잃게 되는 거죠.
더 알아보기
- switch 문과 패턴 매칭에 대한 자세한 내용은 Dart 공식 문서의 pattern 자료를 참고해요.