Kotlin
함수형 프로그래밍 #1 ★
J_Bin
2022. 6. 13. 15:19
- 순수 함수를 사용해야 한다.
- 람다식을 사용 할 수 있다.
- 고차 함수를 사용할 수 있다.
※ 순수 함수의 조건
- 같은 인자에 대하여 항상 같은 값을 반환한다.
- 함수 외부의 어떤 상태도 바꾸지 않는다.
※ 일급 객체의 특징
- 일급 객체는 함수의 인자로 전달할 수 있다.
- 일급 객체는 함수의 반환값에 사용할 수 있다.
- 일급 객체는 변수에 담을 수 있다.
※ 고차함수 : 다른 함수를 인자로 사용하거나, 함수를 결괏값으로 반환하는 함수
#고차함수
package chap02.section1
fun main(){
// 일반 함수를 인자나 반환값으로 사용하는 고차함수
val res1 = sum(3,3)
val res2 = mul(sum(3,3),3)
println("res1: $res1, res2: $res2")
// 반환값에 일반 함수를 사용하는 고차함수
println("funcFunc : ${funcFunc()}")
// 람다식을 인자나 반환값으로 사용하는 고차함수
var result : Int
val multi = { x: Int, y: Int -> x * y }
result = multi(10,20)
println(result)
// 반환 자료형이 없거나(Unit) 매개변수가 하나만 있을 때의 표현
val greet : () -> Unit = { println("Hello Kotlin")} // val greet = {println("Hello Kotlin")} 으로 표현가능
val square : (Int) -> Int = {x -> x * x} // val square = {x: Int -> x * x} 으로 표현가능
}
fun sum(a: Int, b: Int) = a + b
fun mul(a: Int, b: Int) = a * b
fun funcFunc(): Int {
return sum(2,2)
}
package chap02.section1
fun main(){
// 매개변수에 람다식 함수를 이용한 고차 함수
var result : Int
result = highOrder({x,y -> x + y},10,20)
println(result)
// 인자와 반한값이 없는 람다식 함수
val out: () -> Unit = { println("Hello Kotlin")}
out() // 함수처럼 사용 가능
val new = out
new()
}
fun highOrder(sum:(Int,Int) -> Int, a: Int, b: Int): Int{
return sum(a,b)
}