다음의 예제를 살펴보자.
void main() {
List<String> blackPink = ['로제', '지수', '리사', '제니'];
final newBlackPink = blackPink.map((x) {
return '블랙핑크 $x';
});
}
'=>' 키워드를 사용해서 더 간단하게 작성해보면 다음과 같이 작성할 수 있다.
final newBlackPink2 = blackPink.map((x => '블랙핑크 $x');
Map에서도 다음과 같이 사용할 수 있다.
String number = 13579;
final parsed = number.split('').map((x) => '$x.jpg').toList();
print(parsed); // [1.jpg, 3.jpg, 5.jpg, 7.jpg, 9.jpg]
void main() {
Map<String, String> harryPotter = {
'Harry Potter': '해리포터',
'Ron Weasley': '론 위즐리',
'Hermione Granger': '헤르미온느 그레인저'
};
// map to map
harryPotter.map(
(key, value) => MapEntry(
'Harry Potter Character $key',
'해리포터 케릭터 $value',
),
);
print(harryPotter);
print(result);
}
# where
where 키워드를 사용하면 원래 리스트를 변경하지 않고, 조건에 맞는 새로운 리스트를 가져올 수 있다.
void main() {
List<Map<String, String>> people = [
{
'name': '로제',
'group': '블랙핑크',
},
{
'name': '지수',
'group': '블랙핑크',
},
{
'name': 'RM',
'group': 'BTS',
},
{
'name': '뷔',
'group': 'BTS',
},
];
print(people);
final blackPink = people.where((x) => x['group'] == '블랙핑크');
print(blackPink)
}
# reduce
void main() {
List<int> numbers = [
1,
3,
5,
7,
9,
];
numbers.reduce((prev, next){
return prev + next;
});
// 더 간단하게
// numbers.reduce((prev, next) => prev + next);
}
※ reduce를 사용하기 위해서는 리스트 내 타입과 리턴 타입이 일정해야 한다.
# fold
- reduce와 달리 리스트 내 타입이 일정하지 않아도 된다.
- 위 기능을 수행하기 위해선 'fold<T>'에 리턴 타입을 지정해주면 된다.
List<int> numbers = [1, 3, 5, 7, 9];
final sum = numbers.fold<int>(0, (prev, next) => prev + next);
# cascading operator
- '...' 키워드를 사용한다.
- 리스트 안에 리스트 안 값들을 펼쳐서 넣을 수 있다.
void main() {
List<int> even = [
2,
4,
6,
8,
];
List<int> odd = [
3,
5,
7,
9,
];
print([...even, ...odd]);
}
# Json → Class
void main() {
List<Map<String, String>> people = [
{
'name': '로제',
'group': '블랙핑크',
},
{
'name': '지수',
'group': '블랙핑크',
},
{
'name': 'RM',
'group': 'BTS',
},
{
'name': '뷔',
'group': 'BTS',
},
];
final parsedPeople = people.map(
(x) => Person(
name: x['name'],
group: x['group'],
),
).toList();
}
class Person {
final String name;
final String group;
Person({
required this.name,
required this.group,
});
@override
String toString() {
return 'Person(name:$name, group:$group)';
}
}
함수형 프로그래밍을 잘 사용하면, 코드 라인 수를 줄일 수 있고 효율적인 코드를 작성할 수 있는데, 반대로 가독성이 낮아져서 유지보수하기 힘든 코드가 작성될 수 있으니 주의해야 한다.
회사 별, 팀 별로 코드 컨벤션을 잘 작성하면 이러한 부분들을 많이 커버할 수 있다.