Record는 이름있는 필드(named fields)를 갖는 불변 객체를 생성하는데 사용된다. 이는 데이터 모델의 생성 및 사용을 단순화하고 가독성을 향상시키는데 도움이 된다.
다른 컬렉션 유형(List, Set, Map...등)과 마찬가지로 여러 개체를 하나의 개체로 묶을 수 있지만 다른 컬렉션 유형과 달리 Record는 크기와 유형이 고정되어있다.
Record는 Record라는 클래스가 추상클래스로 존재하지만 사용되지 않으며, 타입 선언에는 괄호 안에 들어간 인수 목록을 런타임에서 갖는 '익명' 타입이다. 또한 필드의 길이, 위치, 이름이 저장되며 코드 값과 레코드 유형은 인수 목록 및 단순화된 함수 유형 매개변수 목록과 유사하게 작성된다.
사용법
positional 필드에 기록된 이름은 문서화 목적으로만 사용되며 프로그램에 아무런 영향을 미치지 않는다.
// not work
(String name, int age, bool isActive) record3 = (name:'wonillism', age:1, isActive:false);
// work
(String name, int age, bool isActive) record4 = ('wonillism', 1, false);
Dart는 spread(...) operator와 null-aware spread(...?) operator를 제공한다.
final list = [1,2];
final list2 = [0, ...list];
var list3;
final list4 = [0,1,9, ...?list3];
print(list);
print(list2);
print(list4);
Control-flow operators
Dart에서는 pytho과 같이 한줄 코딩도 가능하게 해준다.
// collection if
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
// collection if-case
var nav = ['Home', 'Furniture', 'Plants', if (login case 'Manager') 'Inventory'];
// collection for
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');