Kotlin - Functions (1)

huihun·2022년 11월 1일
0

Kotlin

목록 보기
2/2

Functions

  • 함수 정의 keyword: fun
fun double(x: Int): Int {
	return 2 * x
}

fun double2(x: Int): Int = 2 * x

Function usage

  • 기본적인 함수 호출법
val result = double(2)

  • member functions 호출법
Stream().read()

Parameters

  • Pascal notation: name: type
  • 함수의 매개변수는 Pascal notation으로 표현
  • 각 매개변수는 쉼표로 구분, 타입은 명시적으로 선언
fun powerOf(number: Int, exponent: Int): Int { 
	/* 구현부 */ 
}

  • trailing comma로 매개변수 표현 가능
fun powerOf(
    number: Int,
    exponent: Int, // trailing comma
): 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) { /*...*/ }  // No default value is allowed.
}

  • 기본값이 없는 매개변수가 기본 매개변수 앞에 있을 경우 명명된 매개변수를 호출해야만 사용 가능
fun foo(
    bar: Int = 0,
    baz: Int,
) { /*...*/ }

foo(baz = 1) // The default value bar = 0 is used

  • 마지막에 오는 매개변수가 람다일 경우, 괄호를 이용하여 밖으로 빼낼 수 있음
fun foo(
    bar: Int = 0,
    baz: Int = 1,
    qux: () -> Unit,
) { /*...*/ }

foo(1) { println("hello") }     // Uses the default value baz = 1
foo(qux = { println("hello") }) // Uses both default values bar = 0 and baz = 1
foo { println("hello") }        // Uses both default values bar = 0 and baz = 1

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!") // skip all the ones with default values
	
	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

0개의 댓글