함수를 다루는 함수. 고차함수는 Collection 타입의 데이터에 있는 요소를 처리하거나 변환할 때 사용해요. 함수를 다루는 함수라 무슨 말인지 이해가 잘 안되죠? 예시들을 보면서 이해해 봅시다.
// List(), Set(), Map() 모두 가능
List<int> numbers = [1, 2, 3, 4, 5];
var doubledNumbers = numbers.map((n) {
return n * 2;
});
print(doubledNumbers); // (2, 4, 6, 8, 10)
List<int> numbers = [1, 2, 3, 4, 5];
var doubledNumbers = numbers.map((n) => n * 2);
print(doubledNumbers); // (2, 4, 6, 8, 10)
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers.where((number) {
return number > 5;
});
print(result); // (6, 7, 8, 9, 10)
List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.where((number) {
return number.isEven
});
print(result); // (2, 4, 6)
TIP💡 .isEven( )은 짝수면 true, .홀수면 false 반환
// firstWhere()
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers.firstWhere((number) {
return number > 5;
});
print(result); // 6
// lastWhere()
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers.lastWhere((number) {
return number > 5;
});
print(result); // 10
5. reduce( ) - Collection 타입의 데이터에 있는 요소들을 하나의 값으로 결합
List<int> numbers = [1, 2, 3, 4, 5];
int result = numbers.reduce((a, b) {
print('a : $a');
print('b : $b');
print('a + b : ${a + b}');
print('----------------------');
return a + b;
});
print('result : $result');
/*
a : 1
b : 2
a + b : 3
----------------------
a : 3
b : 3
a + b : 6
----------------------
a : 6
b : 4
a + b : 10
----------------------
a : 10
b : 5
a + b : 15
----------------------
result : 15
*/
List<int> numbers = [1, 2, 3, 4, 5];
int result = numbers.fold(0, (a, b) {
print('a : $a');
print('b : $b');
print('a + b : ${a + b}');
print('----------------------');
return a + b;
});
print('result : $result');
/*
a : 0
b : 1
a + b : 1
----------------------
a : 1
b : 2
a + b : 3
----------------------
a : 3
b : 3
a + b : 6
----------------------
a : 6
b : 4
a + b : 10
----------------------
a : 10
b : 5
a + b : 15
----------------------
result : 15
*/
//any()
List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.any((n) => n.isEven);
print(result); // true
// every()
List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.every((n) => n.isEven);
print(result); // false
// takeWhile()
List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.takeWhile((number) => number.isOdd);
print(result); // (1)
// skipWhile()
List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.takeWhile((number) => number.isOdd);
print(result); // (2, 3, 4, 5, 6)
TIP💡 .isOdd - 홀수면 true, 짝수면 false 반환