avoid_function_literals_in_foreach_calls 진단: forEach에 함수 리터럴을 넘기지 말아야 할 때

avoid_function_literals_in_foreach_calls 진단: forEach에 함수 리터럴을 넘기지 말아야 할 때

Dart 분석기가 내보내는 진단에는 이름이 있어요. avoid_function_literals_in_foreach_callsIterable.forEach의 인자로 클로저(closure)를 넘겼을 때 Dart 분석기가 알려주는 린트(lint) 진단이에요. 코드가 돌아가는 데 문제가 생기는 건 아니지만, 더 간결하고 명확하게 쓸 수 있어요.

출처: avoid_function_literals_in_foreach_calls

본문

설명

분석기는 Iterable.forEach의 인자(argument)가 클로저일 때 이 진단을 만들어요.

예시

다음 코드는 forEach를 호출할 때 넘긴 인자가 클로저이기 때문에 이 진단을 만들어요.

void f(Iterable<String> s) {
  s.forEach((e) => print(e));
}

흔한 해결 방법

클로저를 tear-off(메서드 참조)로 바꿀 수 있다면 클로저를 대체해요.

void f(Iterable<String> s) {
  s.forEach(print);
}

클로저를 tear-off로 바꿀 수 없다면 for 루프를 사용해서 요소를 순회해요.

void f(Iterable<String> s) {
  for (var e in s) {
    print(e);
  }
}

더 알아보기