for-each 루프 변수는 재할당하지 않으면 final로 선언해요

for-each 루프 변수는 재할당하지 않으면 final로 선언해요

prefer_final_in_for_each 린트 규칙은 for-each 루프 변수를 나중에 재할당하지 않는다면 final로 선언하라고 권하는 규칙이에요. Stable 상태이고 자동 수정도 가능하며, Dart 2.1에서 도입되었어요.

출처: Prefer final in for-each loop variable if reference is not reassigned.

본문

코드에서 나중에 재할당하지 않는 for-each 루프 변수는 final로 선언하세요.

루프 변수를 가능하면 final로 선언하는 게 좋은 습관인 이유는, 실수로 값을 다시 바꾸는 일을 막아 주고 컴파일러가 최적화를 할 수 있게 해 주기 때문이에요.

BAD — 루프 변수를 재할당하지 않는데 var로 선언했어요.

for (var element in elements) { // LINT
  print('Element: $element');
}

GOODfinal로 선언했어요.

for (final element in elements) {
  print('Element: $element');
}

GOOD — 루프 안에서 값을 실제로 바꾼다면 var로 남겨도 괜찮아요.

for (var element in elements) {
  element = element + element;
  print('Element: $element');
}

함께 쓰면 안 되는 규칙

prefer_final_in_for_each 린트는 다음 규칙과 충돌해요.

  • unnecessary_final

규칙 켜기

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

linter:
  rules:
    - prefer_final_in_for_each

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

linter:
  rules:
    prefer_final_in_for_each: true

더 알아보기

  • 루프 바디 안에서 변수 값을 바꾸는 경우라면 이 규칙이 적용되지 않아요.