기본 파라미터 값 과 정의된 인수 (Default Parameter Values and Named Arguments)
fun printMessage(message: String): Unit { // 1
println(message)
}
fun printMessageWithPrefix(message: String, prefix: String = "Info") { // 2
println("[$prefix] $message")
}
fun sum(x: Int, y: Int): Int { // 3
return x + y
}
fun multiply(x: Int, y: Int) = x * y // 4
fun main() {
printMessage("Hello") // 5
printMessageWithPrefix("Hello", "Log") // 6
printMessageWithPrefix("Hello") // 7
printMessageWithPrefix(prefix = "Log", message = "Hello") // 8
println(sum(1, 2)) // 9
}
- 파라미터로 String을 가진 함수이며 리턴값은 Unit 입니다. (Java 에서 Void와 비슷합니다)
- 함수의 2번째 파라미터는 기본값 “Info”를 가지고 있습니다. 리턴값은 생략되어 Unit과 동일합니다.
- 함수의 리턴값은 Int (Integer) 입니다.
- Expression 함수로 리턴값은 Int 입니다.
- 인수 “Hello”를 함께 1번 함수를 호출했습니다.
- 2번 함수의 파라미터를 테스트 합니다.
- 2번 함수의 두번째 파라미터에 기본값이 존재하므로 두번째 파라미터를 생략했습니다.
- 두개의 파라미터 모두에 값을 변경했습니다.
- 3번 함수의 덧셈 결과를 요청했습니다.
삽입함수 (Infix Functions)
fun main() {
infix fun Int.times(str: String) = str.repeat(this) // 1
println(2 times "Bye ") // 2
val pair = "Ferrari" to "Katrina" // 3
println(pair)
infix fun String.onto(other: String) = Pair(this, other) // 4
val myPair = "McLaren" onto "Lucas"
println(myPair)
val sophia = Person("Sophia")
val claudia = Person("Claudia")
sophia likes claudia // 5
println(sophia.likedPeople.get(0).name) // 7
}
class Person(val name: String) {
val likedPeople = mutableListOf<Person>()
infix fun likes(other: Person) { likedPeople.add(other) } // 6
}
1.
- 삽입함수를 호출한다.
- Pair 함수를 생성한다.
- Pair 함수를 활용하는 삽입함수를 생성한다.
- Person 클래스에 정의된 내용대로 likesPeople을 추가한다.
- likes를 호출하면 likedPeople에 그 내역을 추가한다.
- 저장된 Person을 확인한다.
연산자 함수 (Operator Functions)
이미 있는 연산자를 새로 정의하여 업그레이드 시킬 수 있다.
operator fun Int.times(str: String) = str.repeat(this) // 1
println(2 * "Bye ") // 2
operator fun String.get(range: IntRange) = substring(range) // 3
val str = "Always forgive your enemies; nothing annoys them so much."
println(str[0..14])
- Int형에 String의 repeat함수를 적용하여 반복시킨다.
- times와 동일하게 * 를 매칭시켜 사용한다.
- substring에 쉽게 접근 할 수 있게 연산자를 변경하였다.
- get() 연산자는 []로 대체할 수 있다.
가변인자(vararg) 와 함께 사용하는 함수 (Functions with vararg Parameters)
Java에서는 … 를 사용하여 가변인자를 표기했지만 Kotlin에서는 ..를 연산자에서 사용하고 있어서 vararg를 사용한다. 변수이름에 vararg라고 선언하고 사용하면 된다.
fun printAll(vararg messages: String) { // 1
for (m in messages) println(m)
}
printAll("Hello", "Hallo", "Salut", "Hola", "你好") // 2
fun printAllWithPrefix(vararg messages: String, prefix: String) { // 3
for (m in messages) println(prefix + m)
}
printAllWithPrefix(
"Hello", "Hallo", "Salut", "Hola", "你好",
prefix = "Greeting: " // 4
)
- vararg로 값을 받으면 내부에 그대로 전달한다.
- String 가변인자를 받아서 프린트 한다.
- 두개의 파라미터중에 하나에 가변인자를 사용하여 출력한다.
- prefix에는 고정된 값을, messages에는 가변인자를 입력하였다.
https://play.kotlinlang.org/byExample/01_introduction/02_Functions