RxKotlin 공부하기
함수형 프로그래밍의 기초
람다 표현식
람다 또는 람다식은 이름이 없는 익명 함수
를 의미한다. 람다식은 함수라고 말할 수 있지만 모든 함수가 람다식인 것은 아니다.
모든 프로그래밍 언어가 람다식을 지원하는 것도 아니다.
코틀린은 람다 표현을 잘 지원한다. 밑의 예제를 보면서 작동방식을 살펴보자.
[ 예제 ]
1
2
3
4
5
6
7
fun main() {
val sum = { x: Int, y: Int -> x + y} //1
println("Sum ${sum(12,14)}") //2
val anonymousMult = { x: Int -> (Random().nextInt(15)+1) * x}
// 3
println("Random output ${anonymousMult(2)}") //4
}
- 1 -> 두 개의 숫자를 더하고 결과의 합을 반환하는 람다식을 선언한다.
- 2 -> 그 함수를 호출하고 결과를 출력한다.
- 3 -> 15까지 제한된 난수를 전달된
x
와 곱한 후 결과를 반환하는 또 다른 람다를 선언 - 4 -> 결과 출력
순수 함수
함수의 리턴값이 인수/매개 변수에 전적으로 의존하면 이 함수를 순수 함수
라고 한다. 순수 함수는 람다 또는 명명된 함수일 수도 있다. 이전 예제에서 첫 번째 람다식은 순수 함수 였지만 두번째의 경우 반환값은 동일한 값이 전달된 경우에도 달라질 수 있다.
다음 예제를 보자
[ 예제 ]
1
2
3
4
5
6
7
8
9
fun square(n: Int): Int { // 1
return n*n
}
fun main() {
println("named pure func square = ${square(3)}")
val qube = {n: Int -> n*n*n} // 2
println("lambda pure func qube = ${qube(3)}")
}
- 1, 2 -> 모두 순수 함수로서 하나는 이름이 있는 함수, 나머지는 람다이다. 값 3 을 어떤 함수에 n 번 전달하면
매번 동일한 값이 반환
된다. 즉 순수 함수에는 Side Effect 가 없다.
고차 함수
함수를 인자로 받아들이거나 반환하는 함수를 고차 함수
라고 부른다. 다음 예제를 보자
[ 예제 ]
1
2
3
4
5
6
7
8
9
10
11
12
fun highOrderFunc(a: Int, validityCheckFunc:(a: Int)->Boolean) {//1
if(validityCheckFunc(a)) {//2
println("a $a is Valid")
} else {
println("a $a is Invalid")
}
}
fun main() {
highOrderFunc(12, {a:Int -> a.isEven()})//3
highOrderFunc(19, {a:Int -> a.isEven()})
}