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)
}