Flutter - Dart를 함수형 프로그래밍처럼 동작시키기
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!