개발일지

Kotlin in A..Z (8) - 람다 본문

Kotlin (코틀린)

Kotlin in A..Z (8) - 람다

강태종 2020. 7. 11. 06:04

- 람다식 형태

{ x:Int, y:Int -> x + y }

- 람다식을 변수에 할당하기

(Int, Int) -> Int 같은 형식으로 람다의 형태를 선언 후 { x:Int, y:Int -> x + y } 같은 형식으로 대입한다.

 

코드

val lambda1: (Int, Int) -> Int = {x:Int, y:Int -> x + y}

- 람다식 간단히 표현하기

람다의 형태를 선언한 경우 람다의 형태를 표현할 때 자료형을 생략할 수 있다.

val lambda1: (Int, Int) -> Int = {x, y -> x + y}

 

람다를 대입할 때 사용하지 않는 매개변수가 있을 경우 _로 생략할 수 있다.

val lambda1: (Int, Int) -> Int = { _, y -> y }

 

람다의 매개변수가 한개일 경우 생략하여 it으로 표기할 수 있다.

val lambda1: (Int) -> Int = { it }

 

람다의 형태를 선언할 필요 없이 람다를 대입하여 유추할 수 있다.

val lambda1 = {x:Int, y:Int -> x + y}

- 람다 매개변수에 람다 전달하기

코드

fun cal(x:Int, y:Int, lambda: (Int, Int) -> Int): Int {
    return lambda(x, y)
}

fun main() {
    println(cal(1, 2, {num1, num2 -> num1 + num2}))
}

 

결과

3

 

제일 오른쪽에 있는 람다는 괄호 밖으로 꺼내어 전달할 수 있다.

코드

fun cal(x:Int, y:Int, lambda: (Int, Int) -> Int): Int {
    return lambda(x, y)
}

fun main() {
    println(cal(1, 2) {x, y ->
        x + y
    })
}

 

결과

3

 


- 람다 매개변수에 일반 함수 전달하기

:: 키워드를 함수 앞에 붙여서 전달한다

 

코드

fun sum(x:Int, y:Int): Int {
    return x + y
}

fun cal(x:Int, y:Int, lambda: (Int, Int) -> Int): Int {
    return lambda(x, y)
}

fun main() {
    println(cal(1, 2, ::sum))
}

 

결과

3

- 라벨을 사용하여 값 반환하기

라벨을 이용하여 람다식에 이름을 붙이고 return문을 사용할 수 있다.

 

코드

fun test(x: Int, y: Int, lambda: (Int, Int) -> Int) {
    println(lambda(x, y))
}

fun main() {
    test(5, 5) labelLambda@{ x, y ->
        var result = x + y
        if(result == 10) {
            return@labelLambda result*2
        }

        result *= result
        result
    }
}

 

결과

20

- 암묵적 라벨

람다 표현식에 직접 라벨을 붙이는게 아니라 위와같이 함수의 이름을 암묵적으로 람다의 라벨로 사용할 수 있다.

 

코드

fun test(x: Int, y: Int, lambda: (Int, Int) -> Int) {
    println(lambda(x, y))
}

fun main() {
    test(5, 5) { x, y ->
        var result = x + y
        if(result == 10) {
            return@test result*2
        }

        result *= result
        result
    }
}

 

결과

20
Comments