함수
- kotlin에서 함수는 fun 키워드로 시작하며, 중간 식별자와 파라미터 그리고 반환 타입을 작성한다.
- {} 블록으로 함수 구현을 기술한다.
fun test( intTest: Int ): Int {
return intTest
}
특이사항
- java에서 파라미터는 final을 붙이지 않는 이상 가변이다.
- kotlin은 기본 불변이다. 추가적으로 val, var도 못 붙인다. kotlin은 값에 의한 호출 의미론을 사용한다.
위치 기반, 이름이 붙은 인자
- kotlin도 swift 같이 위치, 이름 기반 인자 식별을 지원한다. ```kotlin fun rectangleArea(width: Double, height: Double): Double = width*height
fun main() { rectangleArea(1.0, 1.0) rectangleArea(height = 1.0, width = 1.0) }
## 오버로딩, default 값
- java와 마찬가지로 kotlin도 overload가 된다.
- java와 달리 js 같이 기본 값을 둘 수 있다.
```kotlin
fun plus( a: String, b: String ): String = "$a, $b"
fun plus( a: String, b: String = "HELLO" ): String = "$a, $b"
- overload를 찾는 규칙은 자바와 같다.
가변 인자
- java의 가변인자를 사용하려면
vararg를 붙여야 한다.fun print(vararg text: String) { println(text.contentToString()) } - 추가적으로 배열을 풀어내려면 spread 연산자를 사용하면 된다.
fun printFunction(vararg text: String) {
println(text.contentToString())
}
val test = Array<String>(10) { "$it + 1" }
printFunction(test)
/**
* Type mismatch.
* Required:String
* Found:Array<String>
*/
printFunction(*test)
// 얕은 복사가 된다.
함수 영역, 가시성
- kotlin 함수는 세 가지로 구분된다.
- 파일에 직접 선언된 최상위 함수
- 어떤 타입 내부에 선언된 멤버 함수
- 다른 함수 안에 선언된 지역 함수