fun generateAnswerString(countThreshold: Int): String {
val answerString = when {
count > countThreshold -> "I have the answer."
else -> "The answer eludes me"
}
return answerString
}
// 단순화 가능
fun generateAnswerString(countThreshold: Int): String {
return when {
count > countThreshold -> "I have the answer."
else -> "The answer eludes me"
}
}
// 더 단순화 가능
fun generateAnswerString(countThreshold: Int): String = when {
count > countThreshold -> "I have the answer."
else -> "The answer eludes me"
}
람다의 기본 정의
val lambdaName : Type = { argumentList -> codeBody }
val lambdaName = { argumentName : Type -> codeBody }
예시 코드
val stringLengthFunc: (String) -> Int = { input ->
input.length
}
val stringLength: Int = stringLengthFunc("Android")
String을 받아서 그 문자열의 길이를 반환하는 람다 함수 정의
람다 함수는 여러 값을 리턴할 수 있을까?
data class Time(val hour: Int, val minute: Int, val second: Int)
fun getTime(): Time {
...
return Time(hour, minute, second)
}
2가지 표현 방법
함수의 매개변수 혹은 리턴 값
이 될 수 있음fun main() {
// 1. 람다식 정의 후 사용하기
val lambda = { number: Double ->
number == 4.3213
}
println(invokeLambda(lambda)) // 5.2343 == 4.3213 ? false
// 2. 람다 리터럴 (중괄호를 바로 사용하는 경우)
println(invokeLambda({ it > 3.22 })) // 5.2343 > 3.22 ? true
}
// 람다를 표현하는 2가지 방법
// 람다식은 마치 'value처럼' 사용할 수 있는 익명함수여서
// 함수의 매개변수 또는 리턴값이 될 수 있다.
fun invokeLambda(lambda: (Double) -> Boolean) : Boolean {
return lambda(5.2343)
}
고차 함수
예시 코드
fun stringMapper(str: String, mapper: (String) -> Int): Int {
// Invoke function
return mapper(str)
}
stringMapper("Android", { input ->
input.length
})
// 람다 함수가 함수에 정의된 마지막 매개변수인 경우
// 함수를 호출할 때 괄호 밖에서 함수 전달 가능
stringMapper("Android") { input ->
input.length
}