삼항연산자
int value1 = 5;
bool value2 = false;
value2 = value ? 100 : 200;
?는 자바에서도 볼 수 있는 삼항연산자입니다.
? 앞의 수식이 true면 :의 앞쪽을 반환하고 false면 :의 뒤쪽을 반환합니다.
플러터에서 굉장히 자주 사용하게 되는데, widget내에서는 if문을 사용하지 못하기 때문입니다.
isSignIn
? RaisedButton(
child: Text('SingUP')
onPressed:(){}
)
: SizedBox(),
예시처럼 조건에 맞게 widget이 랜더되야하는 경우에는 삼항연산자를 사용해야합니다.
또, 크기나 기타 위젯의 속성들을 조건에 맞추는 경우도 마찬가지입니다.
그리고 삼항연산자는 반드시 true와 false 두가지 반환값이 필요한데, 아무 위젯도 반환하고 싶지 않을 경우에는
SizedBox를 반환하는 것이 일반적입니다.
정리하자면 if문은 widget에서 사용할 수 없으니 삼항연산자를 사용해야합니다.
nullish coalescing
String data = loadData() ?? 'fail';
마찬가지로 여타 언어에서도 볼 수 있는 연산자입니다.
??앞의 데이터가 null이라면 ??다음을 반환합니다.
이 연산자를 사용할 때 가장 많이하는 실수가 map 타입에서 사용하는 경우입니다.
Map data = {'name' : 'pitter', 'id' : 1};
bool result = data.containsKey('name');
Map의 데이터가 null임을 확인하고 준비해준 데이터로 대체하고 싶다면
??이 아니라 containsKey나 containsValue 함수를 사용하여 Map 내부에 해당하는 key, value가 있는지 확인해야합니다.
만약 data['name'] ?? 'fail' 처럼 코드를 작성했다면 의도한대로 동작하지 않을 것입니다.
'Flutter > Dart' 카테고리의 다른 글
[플러터/다트] where 함수 (JS의 Filter) (1) | 2021.01.25 |
---|---|
[플러터/다트]map() 함수 (0) | 2021.01.23 |
[플러터/다트] 메모리 주소로 전달되는 List (0) | 2021.01.23 |
[다트/플러터] Get, Set 타입 (0) | 2021.01.20 |
[다트/플러터] 클래스 생성자 (0) | 2021.01.19 |