여기서 설명하는 조건 연산자는 if-else 같은 조건문을 말하는 게 아닙니다. 삼항 연산자와 널 병합 연산자 두 가지를 의미합니다.
두 가지 조건 연산자
Dart에는 길고 복잡한 if-else 분기문을 간소화할 수 있는 간결한 조건 연산자 두 개가 제공됩니다. 한 줄로 조건 판단과 값 할당/반환을 모두 처리할 수 있습니다.
- 삼항 조건 연산자:
condition ? expr1 : expr2 - 널 병합 연산자:
expr1 ?? expr2
삼항 연산자 condition ? expr1 : expr2
문법
불리언 조건 ? 조건 참일 때 실행 식 : 조건 거짓일 때 실행 식
condition 결과가 true면 expr1을 반환하고, 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
널 허용 표현식 ?? 기본값
expr1이 null이 아닐 경우 그대로expr1반환;expr1이null일 경우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)
Previous: Dart 비트 연산자 및 시프트 연산자
Next: Dart 캐스케이드 연산자