Functions
fun double(x: Int): Int {
return 2 * x
}
fun double2(x: Int): Int = 2 * x
Function usage
val result = double(2)
Stream().read()
Parameters
- Pascal notation:
name: type
- 함수의 매개변수는 Pascal notation으로 표현
- 각 매개변수는 쉼표로 구분, 타입은 명시적으로 선언
fun powerOf(number: Int, exponent: Int): Int {
}
- trailing comma로 매개변수 표현 가능
fun powerOf(
number: Int,
exponent: Int,
): Int {
}
Default arguments
- 매개변수는 default value를 가질 수 있음
fun read(
b: ByteArray,
off: Int = 0,
len: Int = b.size,
) {
}
=
을 이용하여 default value 지정
- Override method는 항상 기존 method의 default parameter value를 사용한다
- 따라서, Override method에서는 기존 매개변수 값을 재정의하면 안 된다
open class A {
open fun foo(i: Int = 10) { }
}
class B : A() {
override fun foo(i: Int) { }
}
- 기본값이 없는 매개변수가 기본 매개변수 앞에 있을 경우 명명된 매개변수를 호출해야만 사용 가능
fun foo(
bar: Int = 0,
baz: Int,
) { }
foo(baz = 1)
- 마지막에 오는 매개변수가 람다일 경우, 괄호를 이용하여 밖으로 빼낼 수 있음
fun foo(
bar: Int = 0,
baz: Int = 1,
qux: () -> Unit,
) { }
foo(1) { println("hello") }
foo(qux = { println("hello") })
foo { println("hello") }
Named arguments
- 함수의 매개변수가 많을 경우 사용하면 좋음
- named argument를 사용하면 나열된 순서를 자유롭게 변경 가능
- 기본값을 사용하려면 named argument를 모두 생략하면 됨
fun reformat(
str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ',
) { }
fun main() {
reformat(
"String!",
false,
upperCaseFirstLetter = false,
divideByCamelHumps = true,
'_'
)
reformat("This is a long String!")
reformat(
"This is a short String!",
upperCaseFirstLetter = false,
wordSeparator = '_'
)
}
spread operator
를 이용하면 varang
에 값 전달 가능
fun foo(vararg strings: String) { }
foo(strings = *arrayOf("a", "b", "c"))
참고 자료
Kotlin Docs