missing_named_pattern_field_name 진단 — 객체 패턴에 필드 이름이 없어요

missing_named_pattern_field_name 진단 — 객체 패턴에 필드 이름이 없어요

Dart 분석기가 내보내는 missing_named_pattern_field_name 진단은 객체 패턴에서 속성(getter) 이름을 알 수 없는 상황을 알려줘요. 패턴이 어떤 필드를 보는 건지 모호하다는 뜻이에요.

출처: missing_named_pattern_field_name

본문

이 진단은 언제 발생해요?

analyzer는 객체 패턴 안에서 속성의 지정 방식과, 그 속성 값을 매칭하는 패턴이 다음 두 가지 중 어느 것도 갖추지 못했을 때 이 진단을 내보내요.

  • 콜론(:) 앞에 getter 이름이 있거나
  • getter 이름을 유추할 수 있는 변수 패턴이 있거나

두 조건 중 하나라도 있어야 하는데, 둘 다 없으면 안 되겠죠.

예시를 볼까요?

아래 코드는 객체 패턴 C(:0)에서 콜론 앞에 getter 이름이 없고, 콜론 뒤에도 변수 패턴이 없어서 이 진단이 발생해요.

abstract class C {
  int get f;
}

void f(C c) {
  switch (c) {
    case C(:0):
      break;
  }
}

어떻게 고치면 돼요?

① 패턴 안에서 속성의 실제 값을 쓰고 싶을 때는 변수 패턴을 추가해요. 이때 변수 이름은 매칭할 속성의 이름과 같게 하는 게 핵심이에요.

abstract class C {
  int get f;
}

void f(C c) {
  switch (c) {
    case C(:var f) when f == 0:
      print(f);
  }
}

② 패턴 안에서 속성의 값을 쓸 필요가 없을 때는 콜론 앞에 매칭할 속성의 이름만 적어주면 돼요.

abstract class C {
  int get f;
}

void f(C c) {
  switch (c) {
    case C(f: 0):
      break;
  }
}

어떤 경우에 뭘 쓰면 좋아요?

패턴 뒤에서 그 값을 실제로 사용할 일이 있으면 :var f처럼 변수 패턴을, 그냥 값이 0인지만 확인하면 되면 f: 0처럼 콜론 앞에 이름을 쓰는 방식이 자연스러워요.

더 알아보기

  • 객체 패턴을 포함한 패턴 매칭 문법은 Patterns 문서에서 자세히 볼 수 있어요.
  • Dart 분석기 진단 전체 목록은 Diagnostics 문서를 참고해 보세요.