// ?? 연산자, ?. 연산자
class Employee {
String? name;
Employee(this.name);
}
void main(List<String> args) {
List<dynamic> lsAny = [1, 'x', null, 'y'];
// get null into function.
print("[0] null into function unconsciously.");
for (var l in lsAny) {
print(l);
}
// using null operator
// left 가 null이면 right를 리턴
// left가 null이 아니면 그대로 left를 리턴
print("[1] null converts 'NULL' string explicitly.");
for (var l in lsAny) {
print(l ?? 'NULL');
}
// ??의 좌항이 null이면 우측을 선택
print("[2] left가 null이면 right 선택");
var name;
print(name ?? "name is empty");
print("[3] left가 null이 아니면 left 그대로 선택");
name = 'jon';
print(name ?? "name is empty");
print("[4] 함수의 파라미터가 nullable임을 명시");
int? returnPlus(int? x, int? y) {
return (x != null) && (y != null) ? x + y : null; // 삼항 연산자
}
print(returnPlus(1, 3));
print(returnPlus(null, 100));
print(returnPlus(100, null));
Employee e1 = Employee('jon');
print(e1.name?.length);
print("[5] 접근 멤버가 null이 아닌 경우 접근");
Employee e2 = Employee(null);
// ?. conditional memeber access
print(e2.name?.length);
print("[5] name이 null인 경우 오류 발생 없이 null을 반환");
}
// 결과
[0] null into function unconsciously.
1
x
null
y
[1] null converts 'NULL' string explicitly.
1
x
NULL
y
[2] left가 null이면 right 선택
name is empty
[3] left가 null이 아니면 left 그대로 선택
jon
[4] 함수의 파라미터가 nullable임을 명시
4
null
null
3
[5] 접근 멤버가 null이 아닌 경우 접근
null
[5] name이 null인 경우 오류 발생 없이 null을 반환
void main(List<String> args) {
final cities = ['London', 'Paris', 'Moscow'];
// cities = ['venice']; // not working
// final variables can't be re-assigned
// but you can still modify their contents.
cities[1] = 'Venice';
print("Cities: $cities");
}
// 결과
Cities: [London, Venice, Moscow]
void main(List<String> args) {
int age = 60;
double price = 1500;
int? discount;
// age = 50 이면 TypeError: null has no propertiesError 발생
// discount!가 null이 되므로
if (age >= 60) {
discount = 20;
}
discount = discount ?? 0; // the if-null operator ??
// discount! <- assertion operator (I know what I am doing.)
double finalPrice = price - discount;
print(finalPrice);
}
/*
assign a nullable value to a non-nullable variable.
use the assertion operator !
the if-null operator ??
*/
// 결과
1480.0
void main(List<String> args) {
const months = ['January', 'February', 'March', null];
for (var month in months) {
print(month); // it's OK
}
print('');
for (var month in months) {
if (month != null) {
print(month.length);
}
}
print('');
for (var month in months) {
print(month?.length); // this is conditional access operator
}
}
// 결과
January
February
March
null
7
8
5
7
8
5
null
댓글 영역