파라미터는 재할당하지 않으면 final로 선언해요
파라미터는 재할당하지 않으면 final로 선언해요
prefer_final_parameters 린트 규칙은 함수 바디 안에서 재할당하지 않는 파라미터는 final로 선언하라고 권하는 규칙이에요. Dart 2.14에서 도입되었고 자동 수정도 가능해요.
출처: Prefer final for parameter declarations if they are not reassigned.
본문
참고: 이 린트 규칙은 Dart 3.11에서 deprecated(사용 중단) 되었고, Dart SDK의 향후 릴리스에서 제거될 예정이에요. 또한 primary-constructors 언어 기능에 opt-in한 코드에는 이 린트가 적용되지 않는데, 그 기능에서는 파라미터에 final을 쓰는 게 컴파일 타임 에러가 되기 때문이에요. 함수 바디 안에서 파라미터가 재할당되지 않도록 확실히 하고 싶다면, 대신 parameter_assignments 린트 규칙을 켜는 걸 고려해 보세요.
함수 바디 안에서 재할당하지 않는 파라미터는 final로 선언하세요.
파라미터를 가능하면 final로 선언하는 게 좋은 습관인 이유는, 실수로 값을 다시 바꾸는 일을 막아 주기 때문이에요.
BAD — 파라미터를 재할당하지 않는데 final이 아니에요.
void badParameter(String label) { // LINT
print(label);
}
GOOD — final로 선언했어요.
void goodParameter(final String label) { // OK
print(label);
}
BAD — 표현식 함수 바디에서도 동일하게 적용돼요.
void badExpression(int value) => print(value); // LINT
GOOD
void goodExpression(final int value) => print(value); // OK
BAD — 클로저 파라미터에도 적용돼요.
[1, 4, 6, 8].forEach((value) => print(value + 2)); // LINT
GOOD
[1, 4, 6, 8].forEach((final value) => print(value + 2)); // OK
GOOD — 실제로 값을 바꾼다면 final이 아니어도 괜찮아요.
void mutableParameter(String label) { // OK
print(label);
label = 'Hello Linter!';
print(label);
}
함께 쓰면 안 되는 규칙
prefer_final_parameters 린트는 다음 규칙과 충돌해요.
unnecessary_finalavoid_final_parameters
규칙 켜기
analysis_options.yaml 파일의 linter > rules 아래에 prefer_final_parameters를 추가하면 돼요.
linter:
rules:
- prefer_final_parameters
YAML 맵 문법으로 설정한다면 이렇게 써요.
linter:
rules:
prefer_final_parameters: true
더 알아보기
- 이 규칙은 deprecated 상태이니, 새 코드에는
parameter_assignments규칙을 고려해 보세요.