public(공개)이라는 변경자도 있다. 하지만 최상위 함수는 디폴트로 공개 가시성을 갖기 때문에 이 변경자는 불필요한 중복일 뿐이다.
지역 변수처럼 함수 내부에 지역 함수를 정의할 수 있으며, 이 함수의 영역은 함수를 감싸는 블록으로 한정된다.
fun main() {
fun readInt() = readLine()!!.toInt()
println(readInt() + readInt())
}
fun readIntPair() = intArrayOf(readInt(), readInt()) // error: unresolved reference: readInt
지역 함수는 자신을 둘러싼 함수, 블록에 선언된 변수나 함수에 접근할 수 있다. 이런 변수에는 지역 함수를 둘러싸고 있는 함수의 파라미터도 포함된다.
fun main(args: Array<String>) {
fun swap(i: Int, j: Int): String {
val chars = args[0].toCharArray()
val tmp = chars[i]
chars[i] = chars[j]
chars[j] = tmp
return chars.concatToString()
}
println(swap(0, args[0].lastIndex))
}