refutable_pattern_in_irrefutable_context 진단: 반증 가능한 패턴은 불반증 문맥에서 쓸 수 없어요

refutable_pattern_in_irrefutable_context 진단: 반증 가능한 패턴은 불반증 문맥에서 쓸 수 없어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. refutable_pattern_in_irrefutable_context반증 가능한(refutable) 패턴을, 오직 불반증(irrefutable) 패턴만 허용되는 자리에 사용했을 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 패턴 입문자라면 "반증 가능/불반증"이라는 단어가 낯설 수 있는데요, 이 진단을 통해 그 개념이 실제로 어디서 쓰이는지 자연스럽게 익힐 수 있어요.

출처: refutable_pattern_in_irrefutable_context

본문

설명

분석기는 값에 대해 테스트할 수 있는 반증 가능한 패턴이, 항상 일치하는 불반증 패턴만 허용되는 문맥에 쓰였을 때 이 진단을 만들어요.

허용되지 않는 반증 가능한 패턴은 이렇게 나뉘어요.

  • logical-or (|| 패턴)
  • relational (관계 연산자 패턴)
  • null-check (? 패턴)
  • constant (상수 패턴)

그리고 검사 대상이 되는 문맥은 다음과 같아요.

  • 패턴 기반 변수 선언
  • 패턴 기반 for 루프
  • 왼쪽에 패턴이 있는 할당

예시

다음 코드는 반증 가능한 패턴인 null-check 패턴(?)을, 반증 가능한 패턴을 허용하지 않는 패턴 기반 변수 선언에 썼기 때문에 이 진단을 만들어요.

void f(int? x) {
  var (_?) = x;
}

흔한 해결 방법

반증 가능한 패턴을 불반증 문맥에 사용하지 않도록 코드를 다시 쓰면 돼요.

더 알아보기