본문 바로가기
Kotlin

[코틀린] 괄호가 없는 함수

by 붕어사랑 티스토리 2022. 1. 4.
반응형

코틀린을 공부하다보면 간혹가다가 괄호가 없고 바로 중괄호부터 시작하는 함수들이 있다.

 

가령 예를들면 코루틴의 initializer 같은 함수가 대표적인 예시이다.

 

 

이런 함수는 어떻게 만드는 것일까?

 

결론부터 말하면, 함수가 하나의 람다함수만 인풋으로 받을 경우 괄호()를 생략할 수 있다.

 

코틀린 공식문서에는 다음과 같이 적혀있다.

 

If a call takes a single lambda, it should be passed outside of parentheses whenever possible.

https://kotlinlang.org/docs/coding-conventions.html#lambdas

 

인풋으로 람다함수 하나만 받는다면 가능하면 괄호 밖으로 람다함수를 꺼내는게 좋다 라는 얘기

 

 

 

 

 

아래는 대표적인 예시이다

 

fun myfunc(body : () -> Int){
    var abc = body()
    println(abc)
}


fun main() {
   myfunc{
       var a = 10
       a
   }   
}
10

 

람다함수는 리턴타입이 Unit이 아니면 마지막 statement가 return 값임을 기억하자

 

If the inferred return type of the lambda is not Unit, the last (or possibly single) expression inside the lambda body is treated as the return value.

 

https://kotlinlang.org/docs/lambdas.html#passing-trailing-lambdas

 

 

 

 

사실 위 개념은 trailing 이라는 개념으로 다른 언어에서도 볼수 있다.

 

코틀린에서는 정확한 명칭으로는 trailing-lamdas라고 한다.

 

According to Kotlin convention, if the last parameter of a function is a function, then a lambda expression passed as the corresponding argument can be placed outside the parentheses:

val product = items.fold(1) { acc, e -> acc * e }

 

 

즉, 함수의 마지막 파라미터가 함수일경우, 파라미터를 람다함수 형식으로 괄호 밖으로 빼내서 전달 할 수 있는것이다

 

 

 

반응형

댓글