오늘은 dart로 함수형 프로그래밍 functional Programming 에 대해 정리한 내용을 쓱쓱 써볼까 한다.
1.List,Set,Map
간만에 등장한다. List, Set, Map 예시로 보자
void main() {
List<String> blackPink = ['won2','강무개','강강이'];
print(blackPink); // [won2, 강무개, 강강이]
print(blackPink.asMap()); {0: won2, 1: 강무개, 2: 강강이}
-> key 에는 index 값이 들어간다.
}
Set으로도 만들어보자 중복이 제거가 될까?
void main() {
List<String> blackPink = ['won2','강무개','강강이','강강이'];
print(blackPink.toSet()); // {won2, 강무개, 강강이}
-> 중복이 확실하게 되는 것을 볼수 있다.
Map blackPinkMap = blackPink.asMap();
print(blackPinkMap.keys); // (0, 1, 2, 3)
print(blackPinkMap.values); // (won2, 강무개, 강강이, 강강이)
-> key 와 value 들을 추출하는 것이 가능하다.
print(blackPinkMap.keys.toList()); // [0, 1, 2, 3]
print(blackPinkMap.values.toList()); // [won2, 강무개, 강강이, 강강이]
-> 반대로 Map 형태인 것을 List 형태로 변경도 쉽게 가능하다.
Set blackPinkSet = Set.from(blackPink);
print(blackPinkSet); // {won2, 강무개, 강강이};
}
Set.from 이랑 List에다가 toSet()해도 같은 결과값 이다.
2.spread operator
스프레드 연산자 이거는 진짜 기똥찬 기능이다. 개발을 해보면 접하지 않을 수가 없는?~
void main() {
List<int> even = [2,4,6,8];
List<int> odd = [1,3,5,7];
print([...even, ...odd]); // [2, 4, 6, 8, 1, 3, 5, 7]
print(even == [...even]); // false
-> 새로운 리스트에다가 값을 풀어넣기 때문에 false,
}
이거는 정말 자주.. 쓰이는 방법 이기 때문에 잘 알아두는게 좋다고 생각한다.
3.JSON 값 저장하기 (class 구조화)
구조화를 하면 좋은 점이 JSON 형태로 들어온 데이터를 클래스로 변경을 해놓으면 클래스 안에 어떤값이 있고 없고를 정하고 데이터의 구조를 신뢰할 수 있는 상태가 되기 때문이다.
예문으로 보겠다.
void main() {
final List<Map<String, String>> people = [
{
'name' : '김아무개',
'group' : 'bts',
},
{
'name' : '강아무개',
'group' : '블랙핑크',
},
];
print(people);
// [{name: 김아무개, group: bts}, {name: 강아무개, group: 블랙핑크}]
final parsedPeople = people.map(
(x) => Person(
name: x['name']!,
group: x['group']!,
),
).toList();
-> 우리는 값들이 존재한 다는걸 아니깐 느낌표 해가지고 표시를 해준다.
print(parsedPeople); // [Instance of 'Person', Instance of 'Person']
[Instance of 'Person', Instance of 'Person']
-> 값을 확인할려면 클래스 밑에 override 쪽을 확인하면 된다.
for(Person person in parsedPeople) {
print(person.name);
-> 김아무개, 강아무개
}
final bts = parsedPeople.where(
(x) => x.group == 'bts'
);
print(bts);
// (Person(name: 김아무개, group:bts))
print(bts.toList());
// [Person(name: 김아무개, group:bts)]
}
--------------------------클래스---------------------------
class Person {
final String name;
final String group;
Person({
required this.name,
required this.group,
});
@override
String toString(){
return 'Person(name: $name, group:$group)';
}
-> 기본으로 object 클래스에서 제공 print했을 경우 인스턴스가 어떤 형태를 취하는지 알수 있다.
[Person(name: 김아무개, group:bts), Person(name: 강아무개, group:블랙핑크)]
}
여기까지 구조화 하는 방법에 대해 적어놨다. JSON으로 들어오는 값들은 이런식으로 클래스에 저장을 하게 된다 이게 model 이라고 한다. 99% 는 이런방식으로 진행된다고 학습을 하였고 어느정도 어떤 느낌인지 조금은 알꺼같다.
오늘은 여기까지! 다음시간은 async await!