**이 페이지에서 알 수 있는 내용

- QQ Operator 
- QQ Equals (QQ Assignment Operator)**

QQ Operator

QQ Operator는 **3항 연산자**처럼 값을 return 하는 연산자입니다.

왼쪽 ?? 오른쪽 왼쪽이 **null**이라면, 오른쪽을 return 합니다.

예제

// QQ Operator

// 대문자로 바꿔주는 함수
String captalizeName(String? name) => name.toUpperCase();
// error message : The method 'toUpperCase' can't be unconditionally invoked because the receiver can be 'null'.
// null 값일지도 모르는데 대문자로 바꿀 수 없습니다.

// 해결 방법 1 
// if
String capitalizeName1(String? name) {
  if (name != null) {
    // null값이 아니라면
    return name.toUpperCase();
  }
  return 'DASH'; // null값이라면
}

// 해결 방법 2
// 3항 연산자  ? :
String capitalizeName2(String? name) =>
    name != null ? name.toUpperCase() : 'DASH';

// 해결 방법 3  QQ Operator
String capitalizeName3(String? name) => name.toUpperCase() ?? 'DASH';
// error message : The method 'toUpperCase' can't be unconditionally invoked because the receiver can be 'null'.
// name이 nullable이면 해결됩니다.
String capitalizeName3(String? name) => name?.toUpperCase() ?? 'DASH';

void main() {
  String upper, upper1, upper2, upper3;

  upper = captalizeName('flutter');
  print(upper); // FLUUTER 출력

  upper = captalizeName(null);
// error message : The aregument type 'Null' can't be assigned to the parameter type 'String'
// parameter에 ? 추가하면 해결됩니다.

  upper1 = capitalizeName1('Google');
  upper2 = capitalizeName2('Firebase');
  upper3 = capitalizeName3('Playstore');
}

QQ Equals (QQ Assignment Operator)

왼쪽 ??= 오른쪽

‘왼쪽이 null 이라면 오른쪽 값을 왼쪽에 넣어라’ 입니다.

예제

// QQ Equals

void main() {
  String? name;
  name ??= 'ordem';
  name ??= 'another';
  // warning message : The left operand can't be null
  // 윗 줄에서 이미 null일때 ordem을 넣으라고 했고,
  // 따라서 name은 null이 아니기 때문에 경고 메세지가 나왔습니다.
  print(name);
}