Language/Kotlin / / 2021. 1. 18. 21:41

Kotlin에서 Lambda 이것만 외우자

fun main() {
    // 1. 함수를 대입, 근데 이렇게 쓰면 함수 선언하는 거랑 뭐가 다른 거지? scope 차이는 있을 듯
    val lambda = fun(str: String){ println(str) }
    lambda("lambda")

    // 2. 파라미터 ○, 리턴 값 ○
    // (parameter type) -> return type = { parameter 변수 -> return OR 실행할 명령}
    // {parameter 변수: parameter type -> return value OR 실행할 명령}
    val lambda2: (String, Int) -> String = {name, age -> "My name is $name and $age years old"}
    val lambda2_1 = {name: String, age: Int -> "My name is $name and $age years old"}
    println(lambda2("lambda2", 26))
    println(lambda2_1("lambda2_1", 23))

    // 3. 파라미터 ○, 리턴값 X
    val lambda3: (String, Int) -> Unit = {name, age -> println("My name is $name and $age years old")}
    val lambda3_1 = {name: String, age: Int -> println("My name is $name and $age years old")}
    lambda3("lambda3", 26)
    lambda3_1("lambda3_1", 26)

    // 4. 파라미터 X, 리턴값 ○
    val lambda4: () -> String = { "My name is lambda4 and 26 years old" }
    val lambda4_1 = { "My name is lambda4 and 26 years old" }
    println(lambda4())
    println(lambda4_1())

    // 5. 람다식을 일반 변수 값으로 전달, 여기서 sum은 람다식이 아니므로 sum이름으로 호출 불가능
    // ::sum으로 함수를 람다식처럼 전달
    println(funcUsingLambda(100, 200, ::sum))
    // 람다식 전달
    val lambda5: (Int, Int) -> Int = {para1, para2 -> para1 + para2}
    val lambda5_1 = {param1: Int, param2: Int -> param1 + param2}
    println(funcUsingLambda(300, 400,  lambda5))
    println(funcUsingLambda(500, 600, lambda5_1))
    //println(funcUsingLambda(700, 900, (Int, Int) -> Int = {param1, param2 -> param1 + param2})) 이건 사용 못하는 듯
    println( funcUsingLambda(700, 900, {param1: Int, param2: Int -> param1 + param2}) ) // ①번과
    println( funcUsingLambda(700, 900) { param1: Int, param2: Int -> param1 + param2 } ) // ②번 표현을 기억하자
}

//일반 함수를 인자로 전달

fun sum(param1: Int, param2: Int) = param1 + param2
/*
fun sum(param1: Int, param2: Int) {
    return param1 + param2
}
*/
fun funcUsingLambda(param1: Int, param2: Int, lambda: (Int, Int) -> Int) = lambda(param1, param2)

'Language > Kotlin' 카테고리의 다른 글

Constructor 이것만 외우자  (0) 2021.01.19
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유