Late variables
- 2가지 경우에 사용한다.
- 선언 이후에 초기화되는 non-nullable 변수를 선언할 때
- 변수를
Lazily 하게 초기화할 때
- 보통 다트의 제어 흐름 분석이 [non-nullable 변수가 사용전에 non-nullable 값으로 초기화되었는지] 발견할 수 있다
- 하지만 때때로 분석이 실패할 수있다.
- 분석이 실패하는 가장 흔한 두가지 경우는:
- 다트는 자주 위의 애들이 설정되었는지 결정하지 못하기 때문에, 분석을 시도하지 않는다.
- 만약 당신이 [변수가 사용전에 초기화 된다!] 라고 확인하는데, 다트가 그렇지 않다고 한다면 (컴파일러 에러를 발생시킨다면), 그 변수에
late 을 붙여서 해결할 수 있다.
<aside>
💡 만약 late 으로 마킹된 변수를 초기화하지 않고 사용한다면, 런타임 에러가 발생할 것이다.
</aside>
- When you mark a variable as
late but initialize it at its declaration, then the initializer runs the first time the variable is used.
- This lazy initialization is handy in a couple of cases:
- 변수가 당장 필요하지 않고, 초기화 비용이 비쌀 때
- 변수를 초기화하기 위해
this 에 접근해야 할 때
스위프트와 다른점
- 스위프트에서는 인스턴스 변수를 선언만하고 생성자 내부에서 초기화하기만 하면 컴파일러 에러는 발생하지 않는다.
- 다트는 생성자 내부에서 초기화해도
late 을 붙여주어야한다.
- 즉, 선언과 초기화가 동시에 일어나지 않는 이상
late 을 붙여주어야한다.
- 결론: 다트 컴파일러가 좀 더 멍충하다.