상세 컨텐츠

본문 제목

Dart - operator

Dart

by techbard 2023. 12. 21. 15:33

본문

반응형
// ?? 연산자, ?. 연산자

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
반응형

관련글 더보기

댓글 영역