앱 만들기 프로젝트/Dart

Dart - 3.4 QQ Operator(Null-aware operator)

지나가는물리학부생 2024. 10. 15. 00:54
반응형

다음 함수의 name에 null도 들어갈 수 있도록 하고 싶다.

String CapitalizeName(String name) => name.toUpperCase();

?를 붙여볼까?

String CapitalizeName(String? name) => name.toUpperCase();

toUpperCase가 에러라고 소리친다.

당연하지. null을 어떻게 대문자로 만들어.

그렇다면...

  1. name에 null이 들어오면 'ANON' 출력
  2. name이 null이 아니면 대문자로 변환하고 출력.
// 해결하는 방법 1 (가장 긴 방법)
String CapitalizeName2(String? name) {
  if (name != null) {
    return name.toUpperCase();
  }
  return 'ANON';
}

이렇게 하면 가능하긴 하다. 이 방법을 조금 줄여볼까?

// 해결하는 방법 2 (방법 1을 줄이는 방법)
String CapitalizeName3(String? name) =>
    name != null ? name.toUpperCase() : 'ANON';

이것을 더 줄이려면 이때 '??'이 등장한다. Null-aware operator이다.

String CapitalizeName4(String? name) => name.toUpperCase() ?? 'ANON';

left ?? right 이렇게 있을 경우

  1. left가 null일 경우: right 반환
  2. left가 null이 아닐 경우: left 반환

강의 설명을 제대로 이해하지는 못했지만, toUpperCase를 하려는 변수가 nullable하다고 알려주지 않으면 에러가 나타나는 것 같다.

String CapitalizeName5(String? name) => name?.toUpperCase() ?? 'ANON';

이렇게 해야 한다.

 

이번에는 ??= 를 살펴보자.

  String? name;
  name ??= 'me';
  print(name);  // 출력값: me

간단하다.

name ??= 'me';는 name이라는 변수가 null일 경우 me를 넣고, 아니면 해당 값을 유지한다.

 

Null-aware Operator는 여기서 소개한 것들 외에도 여러가지 있는데, 다음의 표로 간단하게 설명하면...

Operator Meaning
?? If-null operator
??=  Null-aware assignment operator
?. Null-aware access & method invocation operator
! Null assertion operator
?.. Null-aware cascade operator
?[] Null-aware index operator
...? Null-aware spread operator

출처: https://www.darttutorial.org/dart-tutorial/dart-null-aware-operators/

반응형

'앱 만들기 프로젝트 > Dart' 카테고리의 다른 글

Dart - 4.0 Your First Dart Class  (1) 2024.10.16
Dart - 3.5 Typedef  (0) 2024.10.16
Dart - 3.3 Optional Positional Parameters  (0) 2024.10.15
Dart - 3.1 Named Parameters  (1) 2024.10.14
Dart - 3.0 Defining a Function  (0) 2024.10.14