fun circleArea(radius:Double): Double{
return radius * radius * Math.PI
} // 정상작동하는 코드
fun circleArea2(radius): Double{
return radius * radius * Math.PI
} // 컴파일 에러!
circleArea 함수 선언문과 circleArea2 함수 선언문의 차이는 radius의 data type 명시의 여부이다. 위에서 알 수 있듯, Kotlin에서 함수 선언 시, parameter의 data type을 반드시 명시해야한다.
만약, 반환값이 없는 함수(void 함수)라면 반환값의 data type을 생략할 수 있다.
fun returnNothing() {
return
} // 정상작동하는 코드
fun returnNothing2(): Unit{
return
} // 정상작동하는 코드
반환값이 없음을 명시하고 싶다면 Unit을 반환값의 data type을 명시하는 자리에 작성하면 된다.
fun changePara(para: Int): Int{
para += 1
return para
}
파라미터로 들어온 인자 값은 함수 내부에서 변경할 수 없다.
fun changePara(para: Int): Int{
para += 1
return para
} // 컴파일 에러!
위 코드와 같은 기능을 하는 함수를 만들고 싶다면 다음과 같이 작성하여야 한다.
fun changePara(para: Int): Int{
val ans = para + 1
return ans
}
코드를 작성하다보면, 함수의 본문이 식 하나, 혹은 코드 한 줄인 경우가 있다.
그 경우엔 다음과 같이 '='을 활용하여 작성한다.
fun circleArea3(radius: Double): Double = Math.PI * radius * radius
// 본 함수는 Math.PI * radius * radius를 반환한다.
// 만약 식에서 반환 값의 Data Type이 유추 가능할 경우 Data Type을 작성하지 않아도 된다.
fun circleArea4(radius: Double) = Math.PI * radius * radius
함수를 호출할 때 파라미터의 이름으로 인자를 전달할 수 있다.
fun rectangleArea(width: Double, height: Double) = width * height
// 다음과 같은 함수가 존재할 때, 이를 호출하는 방법은 다음과 같다.
rectangleArea(w,h)
rectangleArea(width = w, height = h)
rectangleArea(height = h, width = w)
// 모두 같은 의미를 가진다.