use_late_for_private_fields_and_variables — 항상 non-null인 private 멤버는 `late`로
use_late_for_private_fields_and_variables — 항상 non-null인 private 멤버는 late로
null이 될 수 없는 타입인데 항상 null이 아니라고 기대되는 private 멤버는, int?처럼 nullable로 두기보다 late를 붙여 주는 게 좋아요. 그러면 null 검사를 피할 수 있고 의도도 분명해져요. 이 규칙은 현재 실험적(Experimental) 상태예요.
본문
이 규칙은 항상 null이 아니라고 기대되는 non-nullable 타입의 private 멤버에 late를 쓰라고 권장해요. 그렇게 하면 이 필드가 null일 수 없다는 뜻이 명확해지고, 불필요한 null 검사를 피할 수 있어요.
BAD:
int? _i;
m() {
_i!.abs();
}
GOOD:
late int _i;
m() {
_i.abs();
}
int? _i로 선언해 두면 값을 쓸 때마다 _i!처럼 강제 언랩을 해야 해요. 반면 late int _i로 선언하면 _i는 항상 null이 아닌 int로 취급되니까 _i.abs()처럼 바로 쓸 수 있죠.
다만 진짜로 null을 할당할 가능성이 있다면 late를 쓰면 안 돼요. 그런 경우엔 nullable로 두고 ?.를 쓰는 게 맞아요.
OK:
int? _i;
m() {
_i?.abs();
_i = null;
}
더 알아보기
규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 use_late_for_private_fields_and_variables를 추가하면 돼요.
linter:
rules:
- use_late_for_private_fields_and_variables
YAML 맵 문법으로 규칙을 설정한다면 linter > rules 아래에 use_late_for_private_fields_and_variables: true를 쓰면 돼요.
linter:
rules:
use_late_for_private_fields_and_variables: true