글이 너무 길면 임시저장이 안되서 글을 분리했다.
부작용이 없는 함수 : 부작용 = 같은 인자를 넣었는데 반환값이 다른 것
fun sum(a:Int, b:Int):Int{
return a+b
}
sum은 인자로 같은 a,b를 받으면 같은 값을 반환하고 외부의 어떤 상태도 바꾸지 않는 순수함수다.
이름이 없는 함수
{x,y -> x+y}
{인자,인자... -> 반환값} 의 형태로 정의한다.
Kotlin에서는 함수가 일급 객체이다.
package chap4.section1
fun main() {
val res = highLevelFunc(10,20) {x,y->x+y}
println(res)
}
fun highLevelFunc(a:Int, b:Int, sum : (Int,Int)->Int) : Int{
return sum(a,b)
}
highLevelFunc는 Int형 매개변수 a,b와 sum 함수를 매개변수로 갖는다.
함수 매개변수 이름 : (매개변수 자료형, 자료형.. ) -> 반환형) 의 형태로 정의한다.
고차함수를 정의할 때 매개변수에 함수를 이용하면 함수를 맨 뒤에 위치하는 것이 바람직하다. 이렇게 정의하면 main에서 함수를 호출할 때 다른 인자들은 () 에 넣고 람다식만 {}로 빼서 뒷 부분에 작성할 수 있다.
함수형 프로그래밍은 순수 함수를 조합해 상태 데이터 변경이나 부작용이 없는 루틴을 만들어 내며 람다식을 이용해 함수를 변수처럼 매개변수, 인자, 반환값에 사용하는 고차함수를 이용해 생산성을 높인 프로그래밍 방식