본문 바로가기
공부/Dart & Flutter

다트 기초 - 함수형 프로그래밍

by 매니션 2024. 12. 5.

형변환

asMap() : map 형식으로 변환
toSet() : set형식으로 변환(중복제거)
toList() : list형식으로 변환
Set.from(변수) : List로 set을 만드는 법;
// Iterable형태 : ('값1','값2','값3')의 형식. 잘 쓰지 않음(toList()로 변경해서 사용)


map

- for문처럼 사용 가능
- 원본은 보존해고 새로운 리스트로 나옴
  List<String> testList = ['일','이','삼'];

  final newList = testList.map((e){
    return '$e번';
  });
  // 화살표함수
  final newList2 = testList.map((e)=>'$e번');

   


mpa활용

1. map형태(키,값) 그대로 받아오기
- MapEntry로 map전체 받아오기
- keys.map / values.map으로 따로 받아오기
  Map<String, String> fruits = {'apple': '사과', 'banana': '바나나', 'kiwi': '키위'};

  final newFruits = fruits.map((e, k) => MapEntry('(EN)$e', '(KO)$k'));
  final enFruits = fruits.keys.map((en) => '영어:$en');
  final koFruits = fruits.values.map((ko) => '한국어:$ko').toList();

 

split

- 문자를 리스트 형태로 변경

  String number = '146298';
  
  final par = number.split('').map((x)=>'$x.jpg');
  print(par.toList());

 


set

  Set fruitsSet = {'apple', 'banana', 'kiwi'};
  final newSet = fruitsSet.map((f)=>'과일$f').toSet();

 



where

- 원하는 조건대로 필터링해서 리턴

  List<Map<String,String>> movie = [
    {
      'title' : '센치행',
      'team' : '지브리'
    },
    {
      'title' : '겨울왕국',
      'team' : '디즈니'
    },
    {
      'title' : '주토피아',
      'team' : '디즈니'
    },
    {
      'title' : '포뇨',
      'team' : '지브리'
    },
  ];
  
  final disney = movie.where((m)=>m['team']=='디즈니');
  final ghibli = movie.where((m)=>m['team']=='지브리');

 



reduce


- 리스트를 전부 더하여 리턴, 리턴 타입은 최초 리스트와 같은 타입
- 2개의 파라미터 받음

  List<int> num = [1,3,6,4,8];
  final newNum = num.reduce((prev,next)=> prev+next);
  
  List<String> text = ['안녕하세요','저는','퇴근하고싶어요'];
  final newText = text.reduce((p,n)=>p+n);

 



fold

- reduce와 달리 다른 타입 받을 수 있음(다른 타입을 받으려면 명시해줘야함)
- 글자의 길이도 측정 가능(string의.length)
- 최초값 필요(최초값은 반환받는 타입과 같아야함)

  List<int> num = [1,2,3,4];
  final newnum = num.fold(0,(p,n)=>p+n);

  List<String> text = ['안녕하세요 ','저는 ','퇴근하고싶어요 '];
  final newText = text.fold<String>('',(p,n)=>p+n);


  

cascading operator

- 인스턴스 속성이나 함수를 연속해서 사용할 수 있게 하는 연산자
- 리스트 안에 값을 풀어서 넣음
- 형태는 같아도 새로운 리스트라 비교하면 false 반환
- ... 으로 사용

  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,...odd]); // [2, 4, 6, 8, 1, 3, 5, 7]
  print(even == [...even]); // false

 




 실제 사용 예시

  - map을 구조화해서 오타 등 휴먼에러 방지(데이터의 신뢰도 높여줌)

void main(){
  // 기본 map
void main(){
  final List<Map<String,String>> movie = [
    {
      'title' : '센치행',
      'com' : '지브리'
    },
    {
      'title' : '겨울왕국',
      'com' : '디즈니'
    },
    {
      'title' : '주토피아',
      'com' : '디즈니'
    },
    {
      'title' : '포뇨',
      'com' : '지브리'
    },
  ];
  
    final eachMovie = movie.map(
    (m) => Movie(
      title: m['title']!, // !를 붙여서 무조건 존재함을 명시
      com: m['com']!
    )
  ).toList();
  
  print(eachMovie);
 }

  class Movie{ // 형태 명시
    final String title;
    final String com;

    Movie({ // 필수키
      required this.title,
      required this.com
    });
    
    String toString(){
      return '영화제목: $title, 제작사: $com ';
    }
  }


  // void main()안에 작성

  // 활용1 : 제목만 출력
  for(Movie mTitle in eachMovie){
    print(mTitle.title);
  }
  
  // 활용2 : 필터링
  final disney = eachMovie.where(
    (d) => d.com =='디즈니'
  ).toList();
  for(Movie dMovie in disney){
    print(dMovie.title);
  }
  
  // 연결해서 사용 가능
  final linkList = movie.map(
    (m) => Movie(
      title : m['title']!,
      com : m['com']!
    )
  ).where((x)=> x.com == '디즈니');
  print(linkList);
반응형

'공부 > Dart & Flutter' 카테고리의 다른 글

다트 기초 - OOP(객체지향 프로그래밍)  (1) 2024.12.03
다트 기초  (0) 2024.11.27

댓글