iterable로 Map을 만들 때는 for 요소를 써요

iterable로 Map을 만들 때는 for 요소를 써요

prefer_for_elements_to_map_fromIterable 린트 규칙은 iterable에서 Map을 만들 때는 fromIterable보다 for 요소(for elements)를 쓰라고 권하는 규칙이에요. Stable 상태이고 공식 추천(Recommended) 규칙이며 자동 수정도 가능해요.

출처: Prefer for elements when building maps from iterables.

본문

iterable로 Map을 만들 때는 for 요소를 쓰는 게 좋아요. for 요소를 쓰면 여러 가지 이점이 있는데요.

  • 성능(Performance)
  • 유연성(Flexibility)
  • 가독성(Readability)
  • 향상된 타입 추론(Improved type inference)
  • null safety와의 더 나은 상호작용(Improved interaction with null safety)

BADMap.fromIterable로 key와 value 함수를 따로 넘겨줬어요.

Map<String, WidgetBuilder>.fromIterable(
  kAllGalleryDemos,
  key: (demo) => '${demo.routeName}',
  value: (demo) => demo.buildRoute,
);

GOOD — for 요소로 바로 map 리터럴을 만들어요.

return {
  for (var demo in kAllGalleryDemos)
    '${demo.routeName}': demo.buildRoute,
};

GOOD — 타입은 자동으로 추론돼요.

// Map<int, Student>은 명시할 필요 없이 타입이 자동으로 추론돼요.
final pizzaRecipients = {
  ...studentLeaders,
  for (var student in classG)
    if (student.isPassing) student.id: student,
};

규칙 켜기

analysis_options.yaml 파일의 linter > rules 아래에 prefer_for_elements_to_map_fromIterable를 추가하면 돼요.

linter:
  rules:
    - prefer_for_elements_to_map_fromIterable

YAML 맵 문법으로 설정한다면 이렇게 써요.

linter:
  rules:
    prefer_for_elements_to_map_fromIterable: true

더 알아보기

  • for 요소는 map 리터럴 안에서 key-value 쌍을 반복해 만들어 주는 문법이에요.