equal_keys_in_map 진단: 맵 리터럴의 키가 같을 때

equal_keys_in_map 진단: 맵 리터럴의 키가 같을 때

분석기가 내보내는 진단에는 이름이 있어요. equal_keys_in_map맵 리터럴(map literal) 안에 서로 같은 키가 두 개 있을 때 Dart 분석기가 알려주는 진단이에요. 중복된 키 때문에 앞의 값이 덮어써져서, 대개 버그가 있다는 신호로 볼 수 있어요.

출처: equal_keys_in_map

본문

설명

분석기는 상수가 아닌 맵에 있는 어떤 키가 같은 맵의 이전 키와 같을 때 이 진단을 만들어요. 키가 둘 다 같으면 나중 값이 앞의 값을 덮어쓰는데, 그러면 두 쌍을 함께 갖는 게 무의미해져서 흔히 버그를 뜻해요.

예시

다음 코드는 키 ab가 같은 값을 가져서 이 진단이 나와요.

const a = 1;
const b = 1;
var m = <int, String>{a: 'a', b: 'b'};

흔한 해결 방법

두 항목을 모두 맵에 넣고 싶다면 키 중 하나를 바꿔요.

const a = 1;
const b = 2;
var m = <int, String>{a: 'a', b: 'b'};

항목 하나만 필요하다면 필요 없는 항목을 지워요.

const a = 1;
var m = <int, String>{a: 'a'};

참고로 리터럴 맵은 항목의 순서를 유지하므로, 어느 항목을 지우느냐에 따라 반복자(iterator)가 키와 값을 돌려주는 순서가 달라질 수 있어요.