no_default_cases 규칙 — switch에서 default 절 피하기

no_default_cases 규칙 — switch에서 default 절 피하기

enum이나 enum처럼 쓰이는 클래스를 switch로 다룰 때 default 절을 쓰면 나중에 case가 추가돼도 컴파일러가 모든 분기를 확인해 주지 못해요. 이 린트 규칙은 그런 경우를 잡아줘요.

출처: no_default_cases

본문

enum과 enum처럼 쓰이는 클래스를 switch로 다룰 때는 default 절을 쓰지 마세요.

enum처럼 쓰이는 클래스는 비추상(구체) 클래스 중에서 다음 조건을 만족하는 것을 말해요:

  • private non-factory 생성자만 가진다
  • 타입이 자신을 둘러싼 클래스인 static const 필드를 두 개 이상 가진다
  • 정의된 라이브러리 안에 그 클래스의 하위 클래스가 없다

기본 동작은 switch 문 밖에서 정의하세요.

좋지 않은 예:

  switch (testEnum) {
    case TestEnum.A:
      return '123';
    case TestEnum.B:
      return 'abc';
    default:
      return null;
  }

좋은 예:

  switch (testEnum) {
    case TestEnum.A:
      return '123';
    case TestEnum.B:
      return 'abc';
  }
  // Default here.
  return null;

활성화하기

no_default_cases 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 no_default_cases를 추가하면 돼요:

linter:
  rules:
    - no_default_cases

린트 규칙을 YAML 맵 문법으로 설정하고 있다면, linter > rules 아래에 no_default_cases: true를 추가하면 돼요:

linter:
  rules:
    no_default_cases: true

더 알아보기