본문 바로가기
카테고리 없음

플러터 공부 Day3: Functional Programming

by 벡터[x,y] 2023. 4. 5.
반응형

[분류 전체보기] - 플러터 공부 Day 2: OOP

 

플러터 공부 Day 2: OOP

[분류 전체보기] - 플러터 공부 시작 Day 1 플러터 공부 시작 Day 1 안녕하세요 제가 이번에 시작하는 것은 제가 여러 번 도전했다가 실패했던 모바일 앱 개발 공부입니다. 이 글에서는 온라인 강의

jastory.tistory.com

반응형

Day3. 오늘은 다트언어의 functional programming(함수형 프로그래밍) 을 공부했습니다.

 

List, Map, Set

list to map,set: listName.asMap(); / listName.toSet(); / Set setname = Set.from(listName);

set to list: setName.toList();

 

substring

- String을 시작지점과 끝지점 사이의 문자들을 가져온다

ex)

var hi = "helloworld";
hi.substring(2, 7); -> llowo

 

forEach

- list.forEach((item){

      action

   }); 를 사용하면 list의 item을 하나씩 가져와 action을 취할 수 있다

 

map

ex)

List<type> listName = [value1, value2, value3, value4, value5];

final variable = listName.map((x){return blah blah blah}); 혹은 listName.map((x)=>blahblahblah);

- for loop을 도는 대신 .map 을 사용해 list의 값을 하나씩 가져올 수 있다.

 

MapEntry

- Map을 mapping할때 key와 value를 같이 받는데 이 값을 다시 Map으로 돌려주려면 MapEntry 사용

ex)

Map<String, String> names = {'orange': '오렌지', 'banana': '바나나'};

final result = names.map((key, value) => MapEntry('fresh $key', '신선한 $value',));

-> ['fresh orange': '신선한 오렌지', 'fresh banana': '신선한 바나나']

 

Where

-map과 비슷하다, 단 true면 통과, false면 지움

list.where((x)=> x['group'] == 'fruit'); -> 'fruit' 이 있는 item 만 return 해준다

 

reduce

- ex) listName.reduce((prev, next) => prev+next);

- reduce에서는 첫 루핑때 list의 첫번째와 두번째의 값을 가져오고 그 다음 루핑부터는 그 전의 return 값과 그 다음 값을 가져온다.

- List의 값을 다 더할때 주로 사용, 초기 List안의 값의 type과 reduce 결과의 값의 type이 같아야 된다.

 

fold

-reduce 와 비슷함, Reduce는 prev parameter에 첫번째 값이 들어가지만 fold는 그 값을 지정해줘야 됨

- reduce와 달리 generic으로 return type을 지정해줘야 됨

Ex) final sum = numbers.fold<int>(0, (prev, next)=>prev+next);

 

Cascading operator

- list앞에 ...을 붙여 list를 펼쳐줄 수 있다.

- list안에 또 다른 list의 item을 하나씩 넣어줄때 사용

ex) 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]

 

Data to Class

- class로 만들면 에러를 줄일 수 있다

- map을 사용해서, people.map((x)=>Person(name: x['name'], group: x['group']);

   Person{final String name;

                final String group;

                Person({required this.name, required this.group})

                }

- 이렇게 바꾼 새로운 리스트를 정상적으로 표시하려면 Person이라는 class 안에서 String toString(){} 이라는 method를 override해서 바꿔줘야한다

-> @override String toString()=> 'Person (group$group, name$name)';

 

여러 개의 함수를 chain으로 계속 달 수 있다. ex) .where(blahblah).fold(blahblah).toString();

반응형

댓글