관련 없는 타입 간의 동등성 비교

관련 없는 타입 간의 동등성 비교

두 객체를 비교할 때 두 객체의 정적 타입 중 어느 쪽도 다른 쪽의 하위 타입(subtype)이 아니면 이 진단이 발생해요. 보통 그런 비교는 항상 false를 반환해서 프로그래머의 의도를 반영하지 못할 가능성이 커요. 예외 상황도 포함해 함께 살펴볼게요.

출처: unrelated_type_equality_checks

본문

설명

analyzer는 두 객체를 비교하는데 두 객체의 정적 타입 중 어느 쪽도 다른 쪽의 하위 타입이 아닐 때 이 진단을 내보내요.

이런 비교는 보통 false를 반환할 것이고, 프로그래머의 의도를 반영하지 못할 수도 있어요.

오탐(false positive)이 있을 수 있어요. 예를 들어 Point라는 클래스에 CartesianPointPolarPoint라는 하위 클래스가 있고, 어느 쪽도 다른 쪽의 하위 타입이 아닐 수 있어요.

구체적인 사례로, package:fixnumInt64Int32 클래스는 int가 우변에 있을 때 인스턴스를 int와 비교하는 것을 허용해요. 이 경우는 이 진단의 특별한 예외로 처리돼요.

예시

다음 코드는 문자열 s를 정수 1과 비교하기 때문에 진단이 발생해요.

bool f(String s) {
  return s == 1;
}

일반적인 해결 방법

두 피연산자 중 하나를 다른 피연산자와 호환되는 것으로 바꿔줘요.

bool f(String s) {
  return s.length == 1;
}

더 알아보기

  • 이 규칙은 lint rule로도 활성화할 수 있어요. 자세한 내용은 Dart lint rule 목록을 확인해 보세요.