반응형
다음 함수의 name에 null도 들어갈 수 있도록 하고 싶다.
String CapitalizeName(String name) => name.toUpperCase();
?를 붙여볼까?
String CapitalizeName(String? name) => name.toUpperCase();
toUpperCase가 에러라고 소리친다.
당연하지. null을 어떻게 대문자로 만들어.
그렇다면...
- name에 null이 들어오면 'ANON' 출력
- 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 이렇게 있을 경우
- left가 null일 경우: right 반환
- 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 |