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)) }