Dart에서 "collection if"와 "collection for"라는 용어는 리스트나 세트 내에서 직접 조건문이나 반복문을 사용할 수 있게 해주는 구문을 가리킵니다. 이 기능들이 "컬렉션" 안에서 작동하기 때문에 이런 이름이 붙었습니다.
Collection-if: 리스트나 세트 내에서 조건에 따라 요소를 포함시키거나 제외할 수 있습니다. 이를 통해 더 선언적이고 간결한 방식으로 컬렉션을 구성할 수 있습니다.
예시:
var numbers = [1, 2, 3, if (condition) 4];
여기서 condition
이 true
이면 리스트에는 4
가 포함되고, false
이면 포함되지 않습니다.
Collection-for: 리스트나 세트 내에서 반복문을 사용하여 요소를 추가할 수 있습니다.
예시:
var numbers = [1, 2, 3, for (var i in anotherList) i];
이 코드에서 anotherList
의 각 요소는 numbers
리스트에 추가됩니다.
이 두 기능 모두 Dart 2.3에서 도입되었으며, 리스트 또는 세트 리터럴 내에서 직접 작업을 수행할 수 있게 해주어 코드를 더 간결하고 읽기 쉽게 만들어 줍니다. "Collection"이라는 용어는 이러한 구문이 리스트나 세트와 같은 컬렉션 자료구조와 관련이 있다는 것을 반영합니다.
이 코드 예시에서는 Dart의 collection-if 구문을 사용하여 리스트를 생성하고, 조건에 따라 리스트에 요소를 추가하는 방법을 보여주고 있습니다.
Collection-if: 리스트를 정의할 때 특정 조건에 따라 요소를 추가하거나 생략할 수 있습니다. giveMe5000
변수가 true
이면, numbers2
리스트에 5000
이 추가됩니다.
일반 if 문: giveMe5000
변수가 true
이면, numbers2.add(5000)
을 호출하여 리스트에 5000
을 추가합니다. 이 방식은 collection-if와 동일한 결과를 생성합니다.
List 타입 지정: numbers2
는 List<int>
타입으로 명시적으로 선언되어 있으며, 정수만 포함할 수 있습니다. 문자열이나 다른 타입의 값을 추가하려고 시도하면 컴파일 오류가 발생합니다.
List 마지막 요소의 쉼표: 리스트의 마지막 요소 뒤에 쉼표(,)를 추가하면, Dart의 포맷터가 리스트를 멋지게 한 줄씩 정렬해 줍니다.
void main() {
var numbers1 = [
1,
2,
3,
4,
5,
];
var giveMe5000 = true;
List<int> numbers2 = [
6,
7,
8,
9,
10,
// collection-if 구문을 사용하여 조건에 따라 5000을 리스트에 추가
if (giveMe5000) 5000,
];
// 일반 if 문을 사용하여 조건에 따라 5000을 리스트에 추가
if (giveMe5000) {
numbers2.add(5000);
}
numbers1.add(100);
numbers2.add(10000);
// numbers1.add('lalala'); // 오류: 문자열은 int 타입에 할당할 수 없습니다.
print(numbers1); // [1, 2, 3, 4, 5, 100]
print(numbers2); // [6, 7, 8, 9, 10, 5000, 5000, 10000]
}
위 코드에서 numbers1
과 numbers2
리스트는 100
과 10000
을 추가한 상태로 출력됩니다. numbers2
리스트에는 5000
이 두 번 추가된 것을 볼 수 있습니다. 한 번은 collection-if를 사용하여, 다른 한 번은 일반 if 문을 사용하여 추가되었습니다.