missing_named_pattern_field_name 진단 — 객체 패턴에 필드 이름이 없어요
missing_named_pattern_field_name 진단 — 객체 패턴에 필드 이름이 없어요
Dart 분석기가 내보내는 missing_named_pattern_field_name 진단은 객체 패턴에서 속성(getter) 이름을 알 수 없는 상황을 알려줘요. 패턴이 어떤 필드를 보는 건지 모호하다는 뜻이에요.
본문
이 진단은 언제 발생해요?
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 문서를 참고해 보세요.