avoid_double_and_int_checks
avoid_double_and_int_checks
Dart 분석기(analyzer)가 만들어 내는 'avoid_double_and_int_checks' 진단에 대한 설명이에요. double이나 int를 명시적으로 검사하지 말라는 규칙이에요.
본문
설명
분석기는 if 문이 어떤 변수의 타입을 is double로 검사하고, 바로 이어지는 else if가 같은 변수를 is int로 검사할 때 이 진단을 만들어 내요.
JavaScript로 컴파일하면 int 값과 double 값이 모두 JavaScript의 Number 값으로 표현돼요. 모든 int 값은 is double 검사도 통과하기 때문에, is int 분기는 도달할 수 없게 돼요.
Dart가 플랫폼별로 숫자를 어떻게 표현하는지(JavaScript로 컴파일되는 경우 포함) 더 알고 싶다면 Dart의 숫자(Numbers in Dart) 문서를 확인해 보세요.
예시
다음 코드는 x를 is double로 검사한 뒤 is int로 검사하기 때문에, JavaScript로 컴파일하면 is int 분기가 도달할 수 없게 되어 이 진단이 발생해요:
void f(Object x) {
if (x is double) {
print('double');
} else if (x is int) {
print('int');
}
}
일반적인 수정 방법
int와 double의 구분이 중요하지 않다면, 대신 타입이 num인지 검사해요:
void f(Object x) {
if (x is num) {
print('num');
}
}
두 분기가 모두 필요하고, 정수 double 값(예: 3.0)이 is int 분기를 타도 괜찮다면 is int를 먼저 검사해요. 그러면 정수 값이 모든 플랫폼에서 is int 분기를 타게 돼요:
void f(Object x) {
if (x is int) {
print('int');
} else if (x is double) {
print('double');
}
}