순수함수

매개변수로 전달된 인자를 가지고 항상 동일한 결과를 반환하는 함수

순수함수의 조건

부수효과

함수가 실행되는 과정에서 함수 외부의 데이터를 사용 및 수정하거나 외부의 다른 기능을 사용하는 것

fun purefunc(a: Int, b:Int) : Int {
    return a+b
}

fun nonpure1(a: String) {
    println("비순수함수 $a")   // 외부에 출력
}

var state = 100
fun nonpure2(x : Int) : Int {  // 전역변수 값 변
    state += x
    return state
}

fun main(args: Array<String>) {
    println(purefunc(10, 20))  // 함수를 계속 호출해도 결과는 같음
    println(purefunc(10, 20))

    nonpure1("외부 출력")

    println(state)          
    println(nonpure2(108))
    println(state)
    println(nonpure2(108))
    println(state)
}

30 30 비순수함수 외부 출력 100 208 208 316 316

일급 객체 함수