관련 없는 타입 간의 동등성 비교
관련 없는 타입 간의 동등성 비교
두 객체를 비교할 때 두 객체의 정적 타입 중 어느 쪽도 다른 쪽의 하위 타입(subtype)이 아니면 이 진단이 발생해요. 보통 그런 비교는 항상 false를 반환해서 프로그래머의 의도를 반영하지 못할 가능성이 커요. 예외 상황도 포함해 함께 살펴볼게요.
본문
설명
analyzer는 두 객체를 비교하는데 두 객체의 정적 타입 중 어느 쪽도 다른 쪽의 하위 타입이 아닐 때 이 진단을 내보내요.
이런 비교는 보통 false를 반환할 것이고, 프로그래머의 의도를 반영하지 못할 수도 있어요.
오탐(false positive)이 있을 수 있어요. 예를 들어 Point라는 클래스에 CartesianPoint와 PolarPoint라는 하위 클래스가 있고, 어느 쪽도 다른 쪽의 하위 타입이 아닐 수 있어요.
구체적인 사례로, package:fixnum의 Int64와 Int32 클래스는 int가 우변에 있을 때 인스턴스를 int와 비교하는 것을 허용해요. 이 경우는 이 진단의 특별한 예외로 처리돼요.
예시
다음 코드는 문자열 s를 정수 1과 비교하기 때문에 진단이 발생해요.
bool f(String s) {
return s == 1;
}
일반적인 해결 방법
두 피연산자 중 하나를 다른 피연산자와 호환되는 것으로 바꿔줘요.
bool f(String s) {
return s.length == 1;
}
더 알아보기
- 이 규칙은 lint rule로도 활성화할 수 있어요. 자세한 내용은 Dart lint rule 목록을 확인해 보세요.