English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
라우밍 엡셀렉션 또는 단순히 라우밍이라고도 불리며, 이름이 없는 익명 함수입니다. 이 함수는 선언 없이 즉시 표현식으로 전달됩니다. 예를 들어,
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() 함수는 주어진 함수의 최대 값을 생성하는 첫 번째 요소를 반환합니다. 요소가 없으면 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 객체를 반환합니다.
위의 프로그램에서 람다 표현식은 단일 파라미터를 받는 Person 객체의 리스트를 받습니다. 이 경우 it 키워드를 사용할 수 있습니다.
대신
val selectedPerson = people.maxBy({ person -> person.age })
동등한
val selectedPerson = people.maxBy({ it.age })
위의 프로그램에서.
아래의 프로그램은 문자 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