함수 선언 문법
//java
public int max(int a, int b) {
if (a > b){
return a;
}
return b;
}
//kotlin
//1 - public은 생략 가능
fun max(a: Int, b: Int): Int{
if (a > b){
return a
}
return b
}
//2 - if -else는 expression
fun max(a: Int, b: Int): Int{
return if (a > b){
a
} else{
b
}
}
//3 - 함수가 하나의 결과 값이면 block 대신 = 사용 가능
fun max(a: Int, b: Int): Int =
if (a > b){
a
} else{
b
}
//4 - 한 줄로 변경 가능
fun max(a: Int, b: Int): Int = if (a > b) a else b
//5 - =을 사용하는 경우 반환 타입 생략 가능
fun max(a: Int, b: Int) = if (a > b) a else b
- block{ } 을 사용하는 경우 반환타입이 Unit이 아니면 명시적으로 작성해야 됨
- 함수는 클래스 안에 있을 수도, 파일 최상단에 있을 수도 있음
- 한 파일안에 여러 함수들이 있을 수 도 있음
default parameter
Java
public void repeat (String str, int num, boolean useNewLine) {
for (int i = 1; i <= num; i++) {
if (useNewLine) {
System.out.println(str);
} else {
System.out.println(str);
}
}
}
public void repeat (String str, int num) {
repeat(str, num, true);
}
public void repeat (String str) {
repeat(str, 3, true);
}
- java에서 default parameter를 사용하기 위해서는 overloading을 활용해야 했음
- 약간의 코드 중복이 발생함
kotlin
fun repeat(
str : String,
num : Int = 3,
useNewLint : Boolean = true // default parameter
) {
for (i in 1..num) {
if (useNewLine) {
println(str)
}else {
println(str)
}
}
}
repeat("HELLO")
- kotlin에서도 오버로딩을 사용할 수 있긴 함
- 밖에서 값을 넣어주지 않으면 기본 값을 사용함.
named argument(parameter)
//useNewLine 값 명시(named argument)
//num은 기본 값 사용
repeat("HELLO", useNewLine = false)