일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- textstyle
- crawler
- 클래스
- Yocto
- Flutter
- function
- pushnamed
- text
- 크롤러
- 코틀린
- 웹크롤러
- python
- set
- 함수
- import
- 파이썬
- 플러터
- List
- animation
- Collection
- 다트
- map
- 콜렉션
- DART
- Class
- ML
- variable
- package
- Android
- kotlin
- Today
- Total
조용한 담장
Dart: null safety 본문
Null safety
Sound null saftey 에 관해서는 여기.
핵심은?
Null safety principles
Dart null safety support is based on the following three core design principles:
-
Non-nullable by default. Unless you explicitly tell Dart that a variable can be null, it’s considered non-nullable. This default was chosen after research found that non-null was by far the most common choice in APIs.
변수는 기본적으로 null 을 가질 수 없다. -
Incrementally adoptable. You choose what to migrate to null safety, and when. You can migrate incrementally, mixing null-safe and non-null-safe code in the same project. We provide tools to help you with the migration.
코드를 null satefy 로 변환하는 것은 본인 마음. null safety 가 적용되지 않은 코드가 동시에 존재 가능. -
Fully sound. Dart’s null safety is sound, which enables compiler optimizations. If the type system determines that something isn’t null, then that thing can never be null. Once you migrate your whole project and its dependencies to null safety, you reap the full benefits of soundness —- not only fewer bugs, but smaller binaries and faster execution.
null safety 를 적용하면 바이너리 크기가 작아지고 실행속도가 빨라지는 최적화 효과도 얻는다.
그렇다고 한다...
null 이 가능한지인지 아닌지에 대한 판단이 compile 시에 확정되니 실행중에는 속도가 빨라지겠다는 추측..
null safety 과 연관된 operator:
?, !, late
int? aNullableInt = null;
class IntProvider {
late int aRealInt;
IntProvider() {
aRealInt = calculate();
}
}
int value = aNullableInt ?? 0; // 0 if it's null; otherwise, the integer
int? aNullableInt = 2;
int value = aNullableInt!; // `aNullableInt!` is an int.
// This throws if aNullableInt is null.
double? d;
print(d?.floor()); // Uses `?.` instead of `.` to invoke `floor()`.
list, set, map 의 경우 조금더 복잡하다.
List<String>, List<String>?, List<String?>, List<String?>?
Map<String, int>, Map<String, int>?, Map<String, int?>, Map<String, int?>?
? 의 위치에 따라 의미가 다르다.
모든 변수가 null 은 안가지도록 코딩하고
null 을 가져야 하는 특수! 경우에만 신경쓰도록 하자...
null safety 코드를 테스트 해보려면 DartPad 사용.
Migration to null safety
Dart 의 sound null safety 가 beta 로 변경되었다는 블로그 글을 읽어보자.
medium.com/dartlang/announcing-dart-null-safety-beta-87610fee6730
Dart 와 Flutter 에 적용 했고 이제 community package 에도 적용되기를 바란다고 한다.
beta channel 에만 적용 되므로 Dart 2.12 이상 버전에서 사용할 수 있다.
현재 stable ver: 2.10.4, beta ver: 2.12.0-29.10.beta
현재 코드, 패키지에 null safety 를 적용하는 방법.
Step 1: Check if your dependencies are ready
Step 2: Migrate using the migration tool
Step 3: Statically analyze your migrated code
Step 4: Ensure tests pass
Step 5: Publish your null-safe package
migration 을 위한 툴을 제공하고 한다.
자세한 방법은 아래의 페이지 참조.
dart.dev/null-safety/migration-guide
'Dart' 카테고리의 다른 글
Dart 2.7 release (0) | 2019.12.12 |
---|---|
Dart : Generators (0) | 2019.11.22 |
Dart : Generics (0) | 2019.11.22 |
Dart : Collections (0) | 2019.11.19 |
Dart : print (0) | 2019.11.04 |