람다식을 이용해서 고차함수 쉽게 표현
람다식의 가장 일반적인 형태는 { 매개변수 -> 표현식 }
Kotlin에서는 매개변수가 하나일 경우에는 묵시적으로 it을 사용하여 간결하게 작성할 수 있다
매개변수가 없는 경우에는 생략할 수도 있습니다.
- 람다식의 형태
1. 하나의 매개변수만 있는 경우
{ it * it }
이 경우 it은 람다식에서 하나의 매개변수를 나타낸다
2. 여러 개의 매개변수가 있는 경우
{ a, b -> a * b }
이 경우에는 명시적으로 매개변수(a, b)를 지정한다
3. 매개변수가 없는 경우
{ println("Hello") }
이 경우에는 매개변수를 생략하고 표현식(여기서는 println)만을 작성한다
여러 가지 형태의 람다식을 사용하여 다양한 상황에 맞는 함수를 정의할 수 있다
Kotlin은 이러한 유연한 람다식 문법을 통해 코드의 가독성과 표현력을 향상할 수 있다
Kotlin에서는 람다 표현식을 통해 고차함수를 쉽게 작성할 수 있다
val multiply: (Int, Int) -> Int = { a, b -> a * b } // a, b -> a*b 는 람다 표현식이다
val result = multiply(5, 3) // 결과: 15
val numbers = listOf(1, 2, 3, 4, 5)
val printFunction: (Int) -> Unit { value -> println(value) }
// 정수(Int)를 받고 반환값은 없다(Unit) -> 변수(value)를 받아 출력(println) 해라
numbers.forEach { printFunction(it) }
// forEach는 컬렉션의 각 요소에 대해 주어진 람다 표현식(위의 식)을 실행
val 변수명 : (타입1) -> 타입2 : 함수의 매개변수는 타입1, 함수가 반환하는 타입은 타입2
컬렉션끼리 변환할 때▼
val list = listOf("apple", "banana", "orange")
println(list)
val mapFromList = list.associateWith { it.length }
println(mapFromList) // "apple"이 Key 이고 문자열의 길이인 "5"가 값이되는 map생성(나머지도)
val map = mapOf("apple" to 5, "banana" to 3, "orange" to 8)
println(map) // 위와 마찬가지로 "apple"이 Key 지만 각각 5,3,8 인 값을 지정한다
val listFromMap = map.toList()
println(listFromMap) // 키-값 쌍을 답는 리스트가 만들어 진다
// 3번째 변수 기준 [(apple, 5), (banana, 3), (orange, 8)]
list 고차함수를 이용한 작업들
val people = listOf(
mapOf("name" to "김르탄", "age" to 27),
mapOf("name" to "이스파", "age" to 18),
mapOf("name" to "최개발", "age" to 54),
mapOf("name" to "박코딩", "age" to 32),
)
println(people) // 출력 : [{name=김르탄, age=27}, {name=이스파, age=18}, {name=최개발, age=54}, {name=박코딩, age=32}]
people.forEach { println(it) } /* 'people의 각 요소(it)을 순회하며(forEach)
지정된작업(println)을 수행'의 람다식 표현
출력 : {name=김르탄, age=27}
{name=이스파, age=18}
{name=최개발, age=54}
{name=박코딩, age=32} */
people.filter {
val age = it["age"] /* filter 함수에 각 요소(it["age"])에 if문을 사용하여 조건을 확인하고, 조건에 따라 참 또는 거짓을 반환. filter 는 참인 요소만 선택해 새로운 컬렉션을 반환한다*/
if (age is Int) {
age >= 30
} else {
false
}
}.forEach { // 위 예시 코딩에 나온 표현
println(it)
} // 출력 : {name=최개발, age=54}
// {name=박코딩, age=32}
associateWith : collection 요소가 key이고 파라미터 함수에서 반환된 값을 value로 하는 Map을 반환한다
associateBy : collection 요소에 파라미터 함수에서 반환된 값을 키 값, 요소를 value로 하는 map을 반환한다
associate : collection 요소에 파라미터 함수에서 반환된 key-value pair 값으로 Map을 만들어 반환한다
listFromMap : map 을 list 로 변환한 결과를 저장한다 (map 의 키-값 쌍을 담게 된다)
filter : 람다식을 통해 각 요소를 평가하여 참 또는 거짓을 반환하고, 참인 요소만을 포함하는 새로운 리스트를 반환한다