fun hoFun(x1: Int, argFun: (Int) -> Int){
val result = argFun(10)
println("x1 : $x1 , someFun : $result")
}
fun main(args: Array<String>){
hoFun(10, {x->x*x})
}
🖥
x1 : 10 , someFun : 100
- run() 함수
- apply() 함수
- let() 함수
- inline
inline fun hoFunTest(argFun: (x1: Int, x2: Int) -> Int){
abc
}
fun main(args: Array<String>){
hoFunTest {x1, x2 -> x1+x2} // 본문 abc로 복사됨
}
- noinline
inline fun shortFun(a: Int, noinline out: (Int) -> Unit){
println("hello")
out(a)
}
fun main(){
shortFun(3){
println("a: $it")
}
}
🖥
hello
a: 3
inline fun shortFun(a: Int, noinline out: (Int) -> Unit){
println("hello")
out(a) // out 및 shortFun도 리턴시켜버려서 아래문구 출력 안됨
println("goodbye")
}
fun main(){
shortFun(3){
println("a: $it")
return
}
}
🖥
hello
a: 3
- crossinline
inline fun shortFun(a: Int, crossinline out: (Int) -> Unit){
println("hello")
out(a) // out 및 shortFun도 리턴시켜버려서 아래문구 출력 안됨
println("goodbye")
}
fun main(){
shortFun(3){
println("a: $it")
return
}
}
val array = arrayOf(1, -1, 2)
inline fun arrayLoop(){
println("loop top")
array.forEach aaa@{
if(it<0) return@aaa
println(it)
}
println("loop bottom")
}
fun main(){
arrayLoop()
}
🖥
loop top
1
2
loop bottom
- 자동 추가 label 이용
array.forEach {
if(it<0) return@forEach
println(it)
}
hoTest {
if(it.length<4) return@hoTest
println(it)
}