inconsistent_pattern_variable_logical_or 진단: 논리 OR 패턴의 변수 불일치
inconsistent_pattern_variable_logical_or 진단: 논리 OR 패턴의 변수 불일치
Dart 분석기가 만들어 내는 inconsistent_pattern_variable_logical_or 진단에 대한 설명이에요.
본문
논리 OR 패턴(logical-or pattern)의 각 분기에서 선언된 패턴 변수의 타입이나 finality(불변 여부)가 서로 다를 때 이 진단이 발생해요.
설명
논리 OR 패턴의 모든 분기에 선언된 패턴 변수가 각 분기마다 같은 타입을 갖지 않을 때 분석기는 이 진단을 만들어요. 변수가 분기마다 서로 다른 finality를 가질 때도 이 진단이 발생해요. 논리 OR 패턴의 여러 분기에 선언된 패턴 변수는 각 분기에서 같은 타입과 finality를 가져야 해요. 그래야 논리 OR 패턴으로 보호되는 코드에서 그 변수의 타입과 finality를 알 수 있거든요.
예시
다음 코드는 변수 a가 한 분기에서는 int로, 다른 분기에서는 double로 정의되기 때문에 이 진단을 만들어요.
void f(Object? x) {
if (x case (int a) || (double a)) {
print(a);
}
}
다음 코드는 변수 a가 첫 번째 분기에서는 final인데 두 번째 분기에서는 final이 아니기 때문에 이 진단을 만들어요.
void f(Object? x) {
if (x case (final int a) || (int a)) {
print(a);
}
}
흔한 해결 방법
변수의 finality가 서로 다르다면, final로 할지 아닐지를 정해서 각 case가 일관되도록 만들어요.
void f(Object? x) {
if (x case (int a) || (int a)) {
print(a);
}
}
변수의 타입이 다르지만 그 타입이 매칭되는 조건에 중요하지 않다면, 두 분기에서 변수의 타입이 같도록 만들어요.
void f(Object? x) {
if (x case (num a) || (num a)) {
print(a);
}
}
변수의 타입이 다르고 그 타입이 매칭되는 조건에 중요하다면, 조건을 여러 개의 if 문이나 case 절로 나누는 것을 고려해 보세요.
void f(Object? x) {
if (x case int a) {
print(a);
} else if (x case double a) {
print(a);
}
}