Dart 언어에서 함수형 프로그래밍(Functional Programming)을 하기 위한 람다식(Lambda expression) & 익명함수(Anonymous function)을 소개합니다. 람다식을 잘 사용하면 작고 간단한 문제들을 쉽게 해결하면서 깔끔하고 매끄러운 코드를 작성할 수 있습니다.
람다식 & 익명함수
람다식(Lambda expression) 규칙은 아래와 같이 간단합니다.
(매개변수) => 동작 or 리턴값
람다식 중간에 화살표(=>)가 들어가서 화살표 함수(Arrow function)으로도 불립니다.
람다식은 아래와 같이 익명함수(Anonymous function / nameless function)로도 대체될 수 있습니다.
(매개변수) {동작 or 리턴값;}
익명함수는 말 그대로 함수이기 때문에 이름만 없을 뿐, 일반적인 함수 문법을 그대로 따라갑니다. 함수 내용은 대괄호로 감싸주어야 하고, 값을 반환할 때는 반드시 return 키워드를 붙여주어야 합니다.
예제 및 실행 결과
람다식과 익명함수를 사용한 기본 예제입니다. 내용이 간단하여 설명은 생략합니다.
int test() => 123;
int sum(int v1, int v2) => v1 + v2;
void printMessage(String str) => print(str);
String checkInputID(String str) => str.isEmpty ? "ID를 입력하세요." : "ID는 $str 입니다.";
Function func_test = (){return 123;};
Function func_sum = (int v1, int v2){return v1+v2;};
Function func_printMessage = (String str){print(str);};
Function func_checkInputID = (String str){ return str.isEmpty ? "ID를 입력하세요." : "ID는 $str 입니다.";};
void main()
{
// lambda의 다양한 예제
print(test());
print(func_test());
print(sum(3, 5));
print(func_sum(3, 5));
printMessage("Hello Dart!");
func_printMessage("Hello Dart!");
print(checkInputID(""));
print(func_checkInputID(""));
}
List에서 람다식과 익명함수를 사용한 예제코드입니다.
void main()
{
// Correction - List
List<int> list = [1, 2, 3, 4, 5, 6];
// List 출력
list.forEach((i) => print(i));
// list.forEach((i){print(i);}); // 익명함수 ver. 결과 동일
// List - map (값 변형)
var list2 = list.map((i) => i*2);
//var list2 = list.map((i){return i*2;}); // 익명함수 ver. 결과 동일
print(list2);
// List - where (필터링)
var list3 = list.where((i) => i % 2 == 0);
//var list3 = list.where((i){ return i % 2 == 0;}); // 익명함수 ver. 결과 동일
print(list3);
// List - fold
//int val1 = list.fold(10, (prev, i) => prev + i);
int val1 = list.fold(10, (prev, i){return prev + i;}); // 익명함수 ver. 결과 동일
print(val1);
// List - reduce
//int val2 = list.reduce((prev, i) => prev + i);
int val2 = list.reduce((prev, i){ return prev + i;}); // 익명함수 ver. 결과 동일
print(val2);
}