컬렉션 메서드에 무관한 타입의 인자를 넘기지 말아 주세요
컬렉션 메서드에 무관한 타입의 인자를 넘기지 말아 주세요
컬렉션의 특정 메서드(contains, remove, lookup 등)를 호출할 때 컬렉션 요소와 무관한 타입의 인자를 넘기면, 내부에서 == 비교가 이뤄지고 대부분 false가 나와요. 의도한 동작인지 다시 확인해 보세요.
본문
특정 컬렉션 메서드를 호출할 때 무관한 타입의 인자를 넘기는 건 피하는 게 좋아요.
이렇게 하면 컬렉션 요소에 대해 ==가 호출되는데, 대부분 false를 반환하게 돼요.
컬렉션 메서드에 넘기는 인자는 컬렉션 타입과 다음과 같은 관계를 가져야 해요.
Iterable<E>.contains의 인자는E와 관련되어야 하고List<E>.remove의 인자는E와 관련되어야 하며Map<K, V>.containsKey의 인자는K와 관련되어야 해요Map<K, V>.containsValue의 인자는V와 관련되어야 하고Map<K, V>.remove의 인자는K와 관련되어야 하며Map<K, V>.[]의 인자는K와 관련되어야 해요Queue<E>.remove의 인자는E와 관련되어야 하고Set<E>.lookup의 인자는E와 관련되어야 하며Set<E>.remove의 인자는E와 관련되어야 해요
BAD 예시:
void someFunction() {
var list = <int>[];
if (list.contains('1')) print('someFunction'); // LINT
}
BAD:
void someFunction() {
var set = <int>{};
set.remove('1'); // LINT
}
GOOD 예시:
void someFunction() {
var list = <int>[];
if (list.contains(1)) print('someFunction'); // OK
}
GOOD:
void someFunction() {
var set = <int>{};
set.remove(1); // OK
}
활성화하기
collection_methods_unrelated_type 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 collection_methods_unrelated_type을 추가하면 돼요.
linter:
rules:
- collection_methods_unrelated_type
만약 linter 규칙을 YAML 맵 문법으로 설정한다면 linter > rules 아래에 collection_methods_unrelated_type: true라고 적어 주면 돼요.
linter:
rules:
collection_methods_unrelated_type: true
더 알아보기
- Linter rules 목록에서 다른 규칙도 살펴볼 수 있어요.
- 컬렉션 타입 사용법은 Dart 컬렉션 문서에서 확인해 보세요.