avoid_double_and_int_checks

avoid_double_and_int_checks

Dart 분석기(analyzer)가 만들어 내는 'avoid_double_and_int_checks' 진단에 대한 설명이에요. double이나 int를 명시적으로 검사하지 말라는 규칙이에요.

출처: avoid_double_and_int_checks

본문

설명

분석기는 if 문이 어떤 변수의 타입을 is double로 검사하고, 바로 이어지는 else if가 같은 변수를 is int로 검사할 때 이 진단을 만들어 내요.

JavaScript로 컴파일하면 int 값과 double 값이 모두 JavaScript의 Number 값으로 표현돼요. 모든 int 값은 is double 검사도 통과하기 때문에, is int 분기는 도달할 수 없게 돼요.

Dart가 플랫폼별로 숫자를 어떻게 표현하는지(JavaScript로 컴파일되는 경우 포함) 더 알고 싶다면 Dart의 숫자(Numbers in Dart) 문서를 확인해 보세요.

예시

다음 코드는 xis double로 검사한 뒤 is int로 검사하기 때문에, JavaScript로 컴파일하면 is int 분기가 도달할 수 없게 되어 이 진단이 발생해요:

void f(Object x) {
  if (x is double) {
    print('double');
  } else if (x is int) {
    print('int');
  }
}

일반적인 수정 방법

intdouble의 구분이 중요하지 않다면, 대신 타입이 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');
  }
}

더 알아보기