[Kotlin] Kotlin Basic (4) - Function

yuseon Lim·2021년 4월 16일
0

Kotlin

목록 보기
5/11
post-thumbnail
post-custom-banner

Function

  • 기본 형식
fun 함수이름 ( 매개변수 리스트 ) : 리턴타입 { 함수 정의 }
  • 함수 내용이 expression인 경우 리턴타입 추정 가능하므로 생략
fun 함수이름 ( 매개변수 리스트 ) = expression
  • Default arguments 지원
    • 타입 뒤에 =을 써서 정의함
fun read(
    b: ByteArray,
    off: Int = 0,
    len: Int = b.size,
) { /*...*/ }
  • Named arguments 지원
    • 함수를 호출할 때, 파라미터의 이름을 사용해 호출
fun foo(
    bar: Int = 0,
    baz: Int,
) { /*...*/ }

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

Lambda (익명함수)

  • lambda함수는 익명함수 (이름이 없는 함수)

  • {인자 -> 함수내용} 과 같은 형식으로 작성

    • 인자가 한개인 경우 디폴트 인자를 써서 인자 생략 가능
    • 디폴트 인자 it 사용

    예제 출처 : 허준영 교수님 github

// data class MyClass(val a: Int, val b: String)

fun lambdaTest(a : (Int) -> Int) : Int {
    return a(10)
}

fun main()
{
    val sum = { x: Int, y: Int -> x + y }
    println(sum(10, 20))

    val array = arrayOf(MyClass(10, "class1"), MyClass(20, "class2"), MyClass(30, "class3"))
    println(array.filter({ c: MyClass -> c.a < 15 })) // [MyClass(a=10, b=class1)]
    // 람다가 함수 인자의 마지막으로 사용되면, 함수의 괄호 밖으로 뺄 수 있음.
    array.filter() { c: MyClass -> c.a < 15}
    // 람다가 함수의 유일한 인자이면, 함수의 괄호를 생략 할 수 있음.
    array.filter { c: MyClass -> c.a < 15 }
    // 인자 타입 생략 가능한 경우
    array.filter { c -> c.a < 15 }
    // 티폴트 매개변수 이름으로 it를 사용할 수 있음
    array.filter { it.a < 15 } // 일반적으로 많이 사용되는 형태

    print(lambdaTest { it + 10 })

    val title = "Num:"
    val list = listOf(1, 2, 3, 4)
    list.forEach { println("$title $it") } // access title in outside of the lambda
}

참고자료

profile
🔥https://devyuseon.github.io/ 로 이사중 입니다!!!!!🔥
post-custom-banner

0개의 댓글