모든 요소에 함수를 적용할 때는 forEach를 써요

모든 요소에 함수를 적용할 때는 forEach를 써요

prefer_foreach 린트 규칙은 iterable의 모든 요소에 함수나 메서드를 적용하기만 할 때는 forEach를 쓰라고 권하는 규칙이에요. Stable 상태이고 자동 수정도 가능해요.

출처: Use forEach to only apply a function to all the elements.

본문

iterable의 모든 요소에 함수나 메서드를 적용하기만 하는 상황이라면 forEach를 쓰세요.

이렇게 하면 코드가 더 간결해지기 때문이에요.

BADfor 루프로 맵의 키를 순회하며 제거했어요.

for (final key in map.keys.toList()) {
  map.remove(key);
}

GOODforEach로 한 줄에 정리했어요.

map.keys.toList().forEach(map.remove);

참고: for each 문을 forEach 호출로 바꾸면, iterable 자체에 부작용(side-effect)이 있는 경우 동작이 달라질 수 있어요.

for (final v in myList) {
  foo().f(v); // 이 코드는 foo()를 여러 번 호출해요.
}

myList.forEach(foo().f); // 하지만 이 코드는 foo()를 딱 한 번만 호출해요.

규칙 켜기

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

linter:
  rules:
    - prefer_foreach

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

linter:
  rules:
    prefer_foreach: true

더 알아보기

  • iterable 자체를 수정하는 등 부작용이 있을 땐 forEach로 바꾸는 게 동작을 바꿀 수 있으니 주의해요.