[Flutter/Dart] flutter functional Programming

houndhollis·2023년 11월 9일
1
post-thumbnail

오늘은 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!

profile
한 줄 소개

0개의 댓글