Dart 조건 표현식

여기서 설명하는 조건 연산자는 if-else 같은 조건문을 말하는 게 아닙니다. 삼항 연산자와 널 병합 연산자 두 가지를 의미합니다.

두 가지 조건 연산자

Dart에는 길고 복잡한 if-else 분기문을 간소화할 수 있는 간결한 조건 연산자 두 개가 제공됩니다. 한 줄로 조건 판단과 값 할당/반환을 모두 처리할 수 있습니다.

  1. 삼항 조건 연산자:condition ? expr1 : expr2
  2. 널 병합 연산자:expr1 ?? expr2

삼항 연산자 condition ? expr1 : expr2

문법

불리언 조건 ? 조건 참일 때 실행 식 : 조건 거짓일 때 실행 식

condition 결과가 trueexpr1을 반환하고, false일 경우 expr2를 반환합니다.

이 condition은 불리언 값을 반환하며, 해당 불리언 결과를 기준으로 두 값 중 하나를 골라 할당하거나 반환하는 방식입니다.

예시:

void main() {
    bool isRain = true;
	// 삼항 표현식으로 값 할당
	var result = isRain ? '비가 옴' : '비가 안 옴';
	print(result); // 비가 옴

	isRain = false;
	result = isRain ? '비가 옴' : '비가 안 옴';
	print(result); // 비가 안 옴
}Code language: Dart (dart)

실행 결과

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
비가 옴
비가 안 옴Code language: CSS (css)

if-else 문을 먼저 배웠다면 아래처럼 작성할 수도 있습니다.

void main() {
    bool isRain = true;

	String result;
	if (isRain) {
	  result = '비가 옴';
	} else {
	  result = '비가 안 옴';
	}
	print(result);//비가 옴
}Code language: Dart (dart)

널 병합 연산자

변수가 널인지 확인하고 기본값을 빠르게 설정할 때 사용합니다.

문법 expr1 ?? expr2

널 허용 표현식 ?? 기본값
  • expr1null이 아닐 경우 그대로 expr1 반환;
  • expr1null일 경우 expr2 반환

공식 예제

void main() {
	// 매개변수는 널 허용 문자열 String?
	String playerName(String? name) => name ?? 'Guest';

	print(playerName("Tom"));  // Tom
	print(playerName(null));   // Guest
}Code language: JavaScript (javascript)

플레이어 이름을 반환하는 playerName 함수를 선언합니다. 매개변수는 null을 받을 수 있는 문자열 타입이고 ?? 연산자로 기본값을 지정했습니다. 전달받은 name이 null이면 기본적으로 Guest를 반환합니다.

부가 설명

여기서 사용한 playerName은 화살표 함수로, 함수를 간략하게 적는 문법입니다. 나중에 자세히 다룰 예정이며 아래 코드와 완전히 동일한 동작을 합니다.

String playerName(String? name) {
  return name ?? 'Guest';
}Code language: Dart (dart)
동일한 로직 다른 표기 비교
삼항 연산자로 구현
String playerName(String? name) => name != null ? name : 'Guest';Code language: JavaScript (javascript)
전체 if-else 구문
String playerName(String? name) {
  if (name != null) {
    return name;
  } else {
    return 'Guest';
  }
}Code language: JavaScript (javascript)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다