// java
fun max(a: Int, b: Int): Int {
if (a>b) {
return a
} else {
return b
}
}
위 기본적인 함수 형태에서 아래와 같은 수정이 가능하다.
// kotlin
fun max(a: Int, b: Int) = if (a>b) a else b
결과적으로 위와 같이 한줄로 변경할 수 있다.
👏 TIP : = 이 아닌 block {} 을 사용하는 경우에
반환 타입이 Unit 이 아니라면 명시적으로 작성해주어야 한다.
// java
public void repeat(String str, int num) {
for (int i=1; i<=num; i++) {
if (useNewLine) {
System.out.println(str);
} else {
System.out.print(str);
}
}
}
public void repeat(String str, int num) {
repeat(str, num, true);
}
public void repeat(String str) {
repeat(str, 3, true);
}
// kotlin
fun repeat(str: String, num: Int=3, useNewLine: Boolean = true) {
for (i in 1..num) {
if (useNewLine) {
println(str)
} else {
print(str)
}
}
코틀린은 자바와 같이 3번의 메서드를 만들 필요가 없이
파라미터에 기본값을 지정할 수 있다.
코틀린에서는 위 함수에 지정된 파라미터를 모두 넣을 필요가 없다.
repeat(str, useNewLine = false)
위와 같이 parameter 명을 직접 명시해주면 builder 를 쓰는 것 같은 장점을 가질 수 있다. 이를 named argument 라 한다.
👏 TIP : Kotlin 에서 Java 함수를 가져다 사용할 때는 named argument 를 사용할 수 없다.
가변인자란 같은 타입의 여러 파라미터를 받는 것을 말한다.
// java
public static void printAll(String... stringList) {
for (String str: stringList) {
System.out.println(str);
}
}
String[] array = new String[]{"A", "B", "C", ...};
printAll(arrayList);
printAll("A", "B", "C", ...);
자바에서 Type...
를 사용하면 가변인자를 사용하는 것이다.
// kotlin
fun printAll(vararg stringList: String) {
for (str in stringList) {
println(str)
}
}
val array = arrayOf("A", "B", "C", ...)
printAll(*array)
printAll("A", "B", "C", ...)
코틀린에서는 배열을 가변인자에 넣어줄 때 앞에 *
을 명시해주어야 한다. spread 연산자라고 해서 배열안에 있는 값들을 그냥 ,
를 쓰는 것과 같이 변환해준다.