English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin 라우밍 엡셀렉션

라우밍 엡셀렉션

라우밍 엡셀렉션 또는 단순히 라우밍이라고도 불리며, 이름이 없는 익명 함수입니다. 이 함수는 선언 없이 즉시 표현식으로 전달됩니다. 예를 들어,

fun main(args: Array<String>) {
    val greeting = { println("Hello!")}
    //함수 호출
    greeting()
}

프로그램을 실행할 때, 출력이 됩니다:

Hello!

이곳에서 라우밍 엡셀렉션을 변수 greeting에 할당합니다. 이 엡셀렉션은 이 프로그램에서 어떤 인자도 받지 않으며 어떤 값을 반환하지 않습니다.

그런 다음, 다음과 같이 함수(라우밍 엡셀렉션)를 호출합니다:

greeting()

예제: 파라미터와 반환형을 가진 라우밍 엡셀렉션

아래 프로그램은 라우밍 엡셀렉션을 포함하고 있으며, 이 엡셀렉션은 두 정수를 인자로 받아 두 정수의 곱을 반환합니다.

fun main(args: Array<String>) {
    val product = { a: Int, b: Int -> a * b}
    val result = product(9, 3)
    println(result)
}

프로그램을 실행할 때, 출력이 됩니다:

27

이곳에서 라우밍 엡셀렉션은 다음과 같습니다:

주의하세요, 괄호 안에 라우밍 엡셀렉션을 포함하고 있습니다.

고차 함수

Kotlin은 함수형 프로그래밍에 강력한 지원을 제공합니다. 함수를 다른 함수에 전달할 수 있습니다. 또한 다른 함수에서 함수를 반환할 수 있습니다. 이 기능을 고차 함수라고 합니다.

편리를 위해 일반적으로 라우밍 엡셀렉션을 고차 함수에 전달합니다(정형 함수 대신).

예제: 라우밍 엡셀렉션을 함수에 전달

라우밍 엡셀렉션을 고차 함수에 전달해 보겠습니다. 이렇게操作하면 됩니다.

fun callMe(greeting: ()}} -> Unit) {
    greeting()
}
fun main(args: Array<String>) {
    callMe({ println("Hello!") })
}

프로그램을 실행할 때, 출력이 됩니다:

Hello!

여기서 callMe()는 고차 함수입니다(함수를 매개변수로 받기 때문입니다). greeting 매개변수는 callMe() 함수에 전달된 람다를 받습니다:

 greeting: () -> Unit

빈 괄호는 전달된 익명 함수가 어떤 파라미터도 받지 않음을 의미합니다. 그리고 Unit 키워드는 익명 함수가 어떤 값을 반환하지 않음을 의미합니다.

람다는 셋팅을 처리할 때 자주 사용됩니다. 그리고 표준 라이브러리에는 람다를 사용하여 작업을 간소화할 수 있는 몇 가지 내장 함수가 있습니다. 여기서 몇 가지 예제를 볼 수 있습니다:

예제:maxBy() 함수

maxBy() 함수는 주어진 함수의 최대 값을 생성하는 첫 번째 요소를 반환합니다. 요소가 없으면 null을 반환합니다.

data class Person(val name: String, val age: Int)
fun main(args: Array<String>) {
    val people = listOf(
            Person("Jack", 34),}}
            Person("Shelly", 19),}}
            Person("Patrick", 13),}}
            Person("Jill", 12),}}
            Person("Shane", 22),}}
            Person("Joe", 18)
            )
    val selectedPerson = people.maxBy({ person ->  person.age })
    println(selectedPerson)
    println("name: ${selectedPerson?.name}" )
    println("age: ${selectedPerson?.age}" )
}

프로그램을 실행할 때, 출력이 됩니다:

Person(name=Jack, age=34)
name: Jack
age: 34

여기서 maxBy() 함수는 Person 객체의 리스트를 가져와 최대 연령을 가진 Person 객체를 반환합니다.

it 키워드: 단일 파라미터를 위한

위의 프로그램에서 람다 표현식은 단일 파라미터를 받는 Person 객체의 리스트를 받습니다. 이 경우 it 키워드를 사용할 수 있습니다.

대신

val selectedPerson = people.maxBy({ person -> person.age })

동등한

val selectedPerson = people.maxBy({ it.age })

위의 프로그램에서.

예제:maxBy()와 startsWith() 함수

아래의 프로그램은 문자 S로 시작하는 Person 객체의 최대 연령을 계산합니다.

우리는 maxBy()와 startsWith() 두 라이브러리 함수를 이 작업을 완료하기 위해 사용할 것입니다. startsWith() 함수는 매개변수로 전달된 지정된 문자로 시작하면 true를 반환합니다.

data class Person(val name: String, val age: Int)
fun main(args: Array<String>) {
    val people = listOf(
            Person("Jack", 34),}}
            Person("Shelly", 19),}}
            Person("Patrick", 13),}}
            Person("Jill", 12),}}
            Person("Shane", 22),}}
            Person("Joe", 18)
            )
    val selectedPerson = people
            .filter { it.name.startsWith("S") }
            .maxBy{ it.age }
    println(selectedPerson)
    println("name: ${selectedPerson?.name}" )
    println("age: ${selectedPerson?.age}" )
}

프로그램을 실행할 때, 출력이 됩니다:

Person(name=Shane, age=22)
name: Shane
age: 22