안드로이드

[코틀린] 코틀린 - 고차함수

이손안나 2022. 10. 3. 23:08

💡 함수형 프로그래밍?

자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.

💡 고차함수?

함수를 인수로 취급하거나 혹은 결과로 반환하는 함수

💡 람다?

  • 함수가 이름을 가질 필요 없는 익명함수이며 중괄호로 묶어 사용

 

// 람다 함수
val sum : (Int,Int) -> Int = {x,y -> x+y}
(타입, 타입) -> 반환형 타입

val sum = {x: Int, y: Int -> x+y}


// 고차함수

fun calculator(a :Int, b: Int, p: (Int,Int) -> Int) {
	println("$a, $b -> ${p(a,b)}")
}

//호출
calculator(2,4, {a: Int, b: Int -> a+b}) // 이때 람다함수가 인자의 제일 마지막에 있다면 밖으로 뺄 수 있음.

calculator(2,4) {a: Int, b: Int -> a+b}

//또한 고차함수에 타입이 정의되어있는 경우 타입을 생략 가능
calculator(2, 4) { a, b -> a + b }

// 람다 함수가 아닌 일반함수는 앞에 ::를 붙여 인자로 넣기 가능
caculator(2,4,::sum)

// 의미 있는 반환값이 없을 경우 
fun print(p :() -> Unit) {
	p()
}

// 매개변수 함수식을 nullable로 가능
fun print(p :(() -> Unit)? == null{
	p?.invoke()?:println("no")
}