수색…


통사론

  • 명시 적 매개 변수 :

  • {parameterName : ParameterType, otherParameterName : OtherParameterType -> anExpression ()}

  • 유추 된 매개 변수 :

  • 추가 : (Int, Int) -> Int = {a, b -> a + b}

  • 단일 매개 변수로 it

  • 발 광장 : (Int) -> Int = {it * it}

  • 서명:

  • () -> ResultType

  • (InputType) -> ResultType

  • (InputType1, InputType2) -> ResultType

비고

입력 유형 매개 변수는 컨텍스트에서 유추 될 수있을 때 생략 될 수 있습니다. 예를 들어 함수를 사용하는 클래스에 함수가 있다고 가정 해 보겠습니다.

data class User(val fistName: String, val lastName: String) {
    fun username(userNameGenerator: (String, String) -> String) =
        userNameGenerator(firstName, secondName)
}

람다를 전달하여이 함수를 사용할 수 있으며 매개 변수가 함수 시그니처에 이미 지정되어 있으므로 람다 식으로 다시 선언 할 필요가 없습니다.

val user = User("foo", "bar")
println(user.userName { firstName, secondName ->
     "${firstName.toUppercase}"_"${secondName.toUppercase}"
 }) // prints FOO_BAR

이것은 람다를 변수에 할당 할 때도 적용됩니다 :

//valid:
val addition: (Int, Int) = { a, b -> a + b }
//valid:
val addition = { a: Int, b: Int -> a + b }
//error (type inference failure):
val addition = { a, b -> a + b }

람다가 하나 개의 매개 변수를 사용하고, 유형이 문맥에서 추론 할 수있는 경우, 당신은에 의해 매개 변수를 참조 할 수 있습니다 it .

listOf(1,2,3).map { it * 2 } // [2,4,6]

함수를 필터링하는 매개 변수로 람다

val allowedUsers = users.filter { it.age > MINIMUM_AGE }

람다가 변수로 전달됨

val isOfAllowedAge = { user: User -> user.age > MINIMUM_AGE }
val allowedUsers = users.filter(isOfAllowedAge)

함수 호출 벤치마킹을위한 람다

기능이 실행되는 데 걸리는 시간을 측정하기위한 범용 스톱워치 :

object Benchmark {
    fun realtime(body: () -> Unit): Duration {
        val start = Instant.now()
        try {
            body()
        } finally {
            val end = Instant.now()
            return Duration.between(start, end)
        }
    }
}

용법:

val time = Benchmark.realtime({
    // some long-running code goes here ...
})
println("Executed the code in $time")


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow