Dart 문법공부 ..(cascade), …(spred operator)

PathoS
3 min readSep 23, 2019

--

Flutter 스터디중 알 수 없는 특이한 문법을 만나 공식문서를 찾아 정리해 보았다.

Cascade notation(..)

.. 을 사용하면 하나의 오브젝트에 함수호출, 필드접근을 순차적으로 수행할 수 있다.이 과정 중간에 어떤 값이 반환되더라도 무시된다.

querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));

이 코드는 아래의 코드와 동일하게 동작한다.

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

.. 은 중첩도 가능하다.

final addressBook = (AddressBookBuilder()
..name = 'jenny'
..email = 'jenny@example.com'
..phone = (PhoneNumberBuilder()
..number = '415-555-0100'
..label = 'home')
.build())
.build();

주의할점은 실제 오브젝트를 반환하는 함수에 .. 를 사용해야한다.

var sb = StringBuffer();
sb.write('foo')
..write('bar'); // 'void' 타입에는 'write' 메소드가 정의되어 있지 않다.

Spread operator(…), null-aware Spread operator(…?)

... 은 여러개의 항목을 collection에 간편하게 추가할 수 있게 해준다.

var list = [1, 2, 3];
var list2 = [0, ...list]; // [0, 1, 2, 3]
assert(list2.length == 4);

추가하려는 항목이 null 일 수 있다면 아래와 같이 ...? 를 사용한다.

var list;
var list2 = [0, ...?list];
assert(list2.length == 1);

--

--