switch 표현식이 모든 경우를 빠짐없이 처리하지 못하고 있어요

switch 표현식이 모든 경우를 빠짐없이 처리하지 못하고 있어요

switch 표현식에, 통과할 수 있는 가능한 값들 중 하나 이상에 대한 case 가 빠져 있을 때 분석기가 알려주는 진단이에요.

출처: non_exhaustive_switch_expression

본문

switch 표현식이 스스로 통과할 수 있는 가능한 값들 중 하나 이상에 대한 case 를 빠뜨리고 있으면 이 진단이 발생해요.

아래 코드는 switch 표현식에 값 E.three 에 대한 case 가 없어서 이 진단이 나와요.

enum E { one, two, three }

String f(E e) => switch (e) {
  E.one => 'one',
  E.two => 'two',
};

고치는 방법

만약 빠진 값들이 switch 표현식에서 저마다 의미가 분명하다면, 매칭이 안 되는 각 값마다 case 를 추가해 주면 돼요.

enum E { one, two, three }

String f(E e) => switch (e) {
  E.one => 'one',
  E.two => 'two',
  E.three => 'three',
};

빠진 값들을 매칭할 필요가 없다면, 단순한 기본값을 돌려주는 와일드카드 패턴을 추가하는 방법도 있어요.

enum E { one, two, three }

String f(E e) => switch (e) {
  E.one => 'one',
  E.two => 'two',
  _ => 'unknown',
};

한 가지 알아둘 점이 있어요. 와일드카드 패턴은 나중에 그 타입에 추가되는 어떤 값이든 처리하게 돼요. 그러면 컴파일러가 '이 switch 를 새로 추가된 타입에 맞춰 갱신해야 한다'고 경고해 주는 능력을 잃게 되죠.

더 알아보기

  • switch 표현식과 패턴 매칭에 대한 자세한 내용은 Dart 공식 문서의 pattern 자료를 참고해요.