조용한 담장

Dart: null safety 본문

Dart

Dart: null safety

iosroid 2020. 11. 20. 12:07

Null safety

Sound null saftey 에 관해서는 여기.

dart.dev/null-safety

 

Sound null safety

Information about Dart's upcoming null safety feature

dart.dev

핵심은?

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 사용.

nullsafety.dartpad.dev/

 

DartPad

 

nullsafety.dartpad.dev

Migration to null safety

Dart 의 sound null safety 가 beta 로 변경되었다는 블로그 글을 읽어보자.

 

medium.com/dartlang/announcing-dart-null-safety-beta-87610fee6730

 

Announcing Dart null safety beta

Beginning the journey to migrate packages to a sound, safer state

medium.com

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

 

Migrating to null safety

How to move your existing Dart code to the world of null safety

dart.dev

 

'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
Comments