개발하는 두더지

Flutter - Dart를 함수형 프로그래밍처럼 동작시키기 본문

Flutter

Flutter - Dart를 함수형 프로그래밍처럼 동작시키기

덜지 2019. 4. 20. 01:27

dartpad - dart 코드를 실행시켜볼 수 있는 콘솔

Dart를 함수형 프로그래밍처럼 동작시키기

함수형 프로그래밍에서 할 수 있는 것들은

  • 함수를 파라미터로 전달
  • 변수에 함수를 저장
  • 상수 값으로 사용할 수 있는 익명 함수 만들기 (lambda)

dart는 이러한 함수형 프로그래밍의 기능을 제공합니다. 즉 함수를 변수의 값에 할당할 수 있고, 다른 함수에 파라미터로 전달할 수 있습니다. 또한 클래스의 인스턴스를 함수처럼 call할 수도 있습니다.

String scream(int length) => "A${'a' * length}h!";

main() {
  final values = [1, 2, 3, 5, 10, 50];
  for (var length in values) {
    print(scream(length));
  }
}

위 코드의 결과 값은 아래와 같습니다.
Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!



A${'a' * length}h! 처럼 ${} 표현식안에 계산하는 수식도 넣을 수 있습니다.



for문 대신에 values.map(scream).forEach(print); 를 넣어서 실행 가능합니다.
map 은 리스트의 값을 하나씩 받아서 scream 함수를 통해 String 값으로 처리하고 다시 리스트에 담아줍니다
forEach 는 scream 함수를 통해 리스트에 저장된 새로운 String 값을 print 해줍니다.



dart:collection 에는 fold where join skip 과 같은 기능도 제공합니다.
RxJava를 해보셨으면 이해가 되는 코드입니다.
skip 은 첫번째 값을 무시
take 는 3개의 값만 가져옴


String scream(int length) => "A${'a' * length}h!";

main() {
  final values = [1, 2, 3, 5, 10, 50];
  values.map(scream).forEach(print);

  print('---------------');

  values.skip(1).take(3).map(scream).forEach(print);
}

결과물은 아래와 같습니다.

Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!

Aaah!
Aaaah!
Aaaaaah!

Comments