refutable_pattern_in_irrefutable_context 진단: 반증 가능한 패턴은 불반증 문맥에서 쓸 수 없어요
refutable_pattern_in_irrefutable_context 진단: 반증 가능한 패턴은 불반증 문맥에서 쓸 수 없어요
Dart 분석기가 내보내는 진단에는 이름이 있어요. refutable_pattern_in_irrefutable_context는 반증 가능한(refutable) 패턴을, 오직 불반증(irrefutable) 패턴만 허용되는 자리에 사용했을 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 패턴 입문자라면 "반증 가능/불반증"이라는 단어가 낯설 수 있는데요, 이 진단을 통해 그 개념이 실제로 어디서 쓰이는지 자연스럽게 익힐 수 있어요.
본문
설명
분석기는 값에 대해 테스트할 수 있는 반증 가능한 패턴이, 항상 일치하는 불반증 패턴만 허용되는 문맥에 쓰였을 때 이 진단을 만들어요.
허용되지 않는 반증 가능한 패턴은 이렇게 나뉘어요.
- logical-or (
||패턴) - relational (관계 연산자 패턴)
- null-check (
?패턴) - constant (상수 패턴)
그리고 검사 대상이 되는 문맥은 다음과 같아요.
- 패턴 기반 변수 선언
- 패턴 기반 for 루프
- 왼쪽에 패턴이 있는 할당
예시
다음 코드는 반증 가능한 패턴인 null-check 패턴(?)을, 반증 가능한 패턴을 허용하지 않는 패턴 기반 변수 선언에 썼기 때문에 이 진단을 만들어요.
void f(int? x) {
var (_?) = x;
}
흔한 해결 방법
반증 가능한 패턴을 불반증 문맥에 사용하지 않도록 코드를 다시 쓰면 돼요.