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');
}
GOOD — final로 선언했어요.
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
더 알아보기
- 루프 바디 안에서 변수 값을 바꾸는 경우라면 이 규칙이 적용되지 않아요.