: 함수가 이름이 없는 것
fun (x:Int, y:Int): Int=x+y //함수 이름이 생략된 익명 함수
: 이름이 없기에, 변수 내에서 선언하는 등 임시적인 용도로 사용함
val add:(Int, Int)-> Int=fun(x,y)=x+y //익명함수를 사용한 add 선언
val result=add(10,2) //add의 사용
일반 익명 함수에서는 return, break, continue가 사용 가능하지만 람다식에서는 사용하기 어려움.
(라벨 표기법과 같이 사용해야 함)
noinline 키워드
일부 람다식 함수를 인라인 되지 않게 하기 위해 사용
fun main() {
shortFunc(3) {
println("First call: $it")
return // ①
}
}
inline fun shortFunc(a: Int, out: (Int) -> Unit) {
println("Before calling out()")
out(a)
println("After calling out()") // ②
}
1. crossinline 키워드 사용
아래는 해당 키워드를 사용한 예시이다.inline fun shortFunc(a: Int, crossinline out: (Int) -> Unit) { println("Before calling out()") nestedFunc { out(a) } println("After calling out()") }
2. 라벨을 사용해 람다식만 종료
이 경우, 람다식이 인라인 함수가 아니어야 한다. 매개변수로 사용하는 람다식 시작부분에 @라벨을 붙이고 끝부분에 라벨@을 불여야 한다.fun shortFunc(a: Int, crossinline out: (Int) -> Unit) { println("Before calling out()") nestedFunc { out(a) } println("After calling out()") } fun main() { shortFunc(3) lambda@{ println("First call: $it") return@lambda } }
fun 확장대상.함수명(매개변수,...): 반환값{
return 값
}
fun main() {
val source = "Hello World!"
val target = "Kotlin"
println(source.getLongString(target))
}
// String을 확장해 getLongString 추가
fun String.getLongString(target: String): String =
if (this.length > target.length) this else target