하지만 경우에 따라 반환 타입을 생략할 수 있는데, 이런 예외적인 두 가지 경우가 있다. 첫 번째는 유닛(unit) 타입을 반환하는 경우다. 유닛은 자바 void에 해당하는 코틀린 타입으로, 함수가 의미 있는 반환값을 돌려주지 않는다는 뜻이다. 이런 함수가 반환하는 값은 Unit이라는 내장 타입에 속하는 Unit이라는 상수다. 함수 정의에서 반환값 타입을 지정하지 않으면 코틀린은 여러분이 Unit 함수를 정의한다고 가정한다. 즉, 다음 두 함수의 정의는 서로 동등하다.
fun prompt(name: String) { println("***** Hello, $name! *****") } fun prompt(name: String): Unit { println("***** Hello, $name! *****") }
이미 main() 예제에서 이런 예를 봤다. Unit 함수는 결과가 항상 Unit으로 동일하기 때문에 결과를 지정하는 return 문을 쓸 필요가 없다. 하지만 함수 본문의 끝에 도달하기 전에 함수 실행을 마치려면 return 문을 사용해 함수를 끝내야 한다(return Unit이라고 써도 정상적인 문장이지만, 이 경우 Unit은 불필요한 중복일 뿐이다).
두 번째는 식이 본문인(expression-body) 함수다. 어떤 함수가 단일 식으로만 구현될 수 있다면 return 키워드와 블록을 만드는 중괄호({})를 생략하고 다음과 같은 형태로 함수를 작성해도 된다. 여기서 반환 타입과 함수 본문 식 사이에 =가 들어있다는 점에 유의하라.
fun circleArea(radius: Double): Double = PI*radius*radius