duplicate_pattern_field 진단: 패턴에서 같은 필드를 두 번 매칭할 때

duplicate_pattern_field 진단: 패턴에서 같은 필드를 두 번 매칭할 때

Dart 분석기가 만들어 내는 duplicate_pattern_field 진단에 대한 설명이에요. 레코드 패턴이나 객체 패턴에서 같은 필드(또는 getter)를 두 번 이상 매칭하려 할 때 분석기가 알려주는 컴파일 타임 진단이에요.

출처: duplicate_pattern_field

본문

설명

분석기는 레코드 패턴이 같은 필드를 두 번 이상 매칭할 때, 또는 객체 패턴이 같은 getter를 두 번 이상 매칭할 때 이 진단을 만들어요.

예시

다음 코드는 같은 레코드 패턴에서 레코드 필드 a가 두 번 매칭되기 때문에 이 진단을 만들어요.

void f(({int a, int b}) r) {
  switch (r) {
    case (a: 1, a: 2):
      return;
  }
}

다음 코드는 같은 객체 패턴에서 getter f가 두 번 매칭되기 때문에 이 진단을 만들어요.

void f(Object o) {
  switch (o) {
    case C(f: 1, f: 2):
      return;
  }
}

class C {
  int? f;
}

흔한 해결 방법

중복된 필드의 값이 여러 가지일 때 모두 매칭하고 싶다면, 논리합(logical-or) 패턴을 사용해요.

void f(({int a, int b}) r) {
  switch (r) {
    case (a: 1, b: _) || (a: 2, b: _):
      break;
  }
}

여러 필드에 대해 매칭하고 싶다면, 필드 중 하나의 이름을 바꿔요.

void f(({int a, int b}) r) {
  switch (r) {
    case (a: 1, b: 2):
      return;
  }
}

더 알아보기