5-1 람다함수와 고차 함수

StrayCat·2022년 10월 3일
0

람다함수

  • 중괄호를 사용해서 표현한다.
  • {매개변수 -> 함수본문}
  • 반환값은 함수 마지막줄이다.
  • return문 사용 불가능
fun sum(a:Int, b:Int):Int{ // 일반함수
    return a+b
}

val sum2 = {a:Int,b:Int->a+b}  //람다함수

함수 뒤에 소괄호에 매개변수를 넣어 호출한다.

sum2(10,10)

혹은 선언 뒤에 바로 붙여서 호출한다.

{a:Int,b:Int->a+b} (20,20)

매개변수 없는경우

{->println("asdf")}

+화살표 생략

{println("asdf")}

매개변수가 1개일때
기본식

val some = {a:Int -> println(a)}

함수타입과 it키워드를 사용해 다르게 작성 ( 함수타입 생략 불가능 )

val some:(Int)->Unit = {println(it)}

람다함수의 반환

람다함수는 return키워드 사용이 불가능한다.
대신 마지막줄의 실행결과를 반환값으로 받는다.

val sum2 = {a:Int,b:Int->
    println("asdf")
    a+b}

함수 타입과 고차 함수

함수 타입

val sum:(Int,Int)->Int = {a:Int,b:Int -> a+b}

(Int,Int)->Int 가 sum의 함수 타입이다.

  • 함수타입은 typealias를 이용해서 타입 별칭을 선언할 수 있다.
typealias MySumType = (Int,Int)->Int

val sum:MySumType = {a:Int,b:Int -> a+b}

이 경우 이미 a, b의 타입을 알 수 있으므로 생략이 가능하다.

val sum:MySumType = {a,b -> a+b}

고차함수

고차함수란 함수를 매개변수로 전달받거나 반환하는 함수를 의미한다.

fun hof(arg: (Int)->Boolean) : ()->String{
    val result = if(arg(10)){
        "valid"
    }else{
        "invalid"
    }
    return {"hof result : $result"}
}
fun main(){
    val result = hof { no -> no > 0 }
    println(result())
}

0개의 댓글