이해하기 쉬운 간결한 코드 작성을 위한 람다
오늘은 람다에 대한 학습을 다루는 아톰이다.
람다는 자바에서도 잠깐 다뤄보기는 했지만 많이 사용하지는 않았었는데, 코틀린에서는 어떻게 쓰이는지 알아보자
[ 람다 ]
람다
: 부가적인 장식이 덜 들어간 함수로, 함수 리터럴이라고 불리기도 함
: 이름이 없고, 함수 생성에 필요한 최소한의 코드만 필요
: 다른 코드에 람다를 직접 삽입할 수 있음
: 중괄호({}) 사이에 작성하며, 파라미터 목록과 함수 본문 사이에 -> 가 들어감
: 타입 추론도 가능
: 람다에 파라미터가 없는 경우가 존재하며, 이 경우 화살표를 남겨두는 것이 아닌 화살표 사용을 하지 않는 것을 권장
import atomictest.eq
fun main(){
val list = listOf(1, 2, 3, 4)
val result = list.map({n: Int -> "[$n]"})
// val result = list.map({ n -> "[$n]"}) // n에서 타입 추론 가능하기 때문에 생략 가능
// val result = list.map({"[$it]"}) // 파라미터가 하나인 경우
result eq listOf("[1]", "[2]", "[3]", "[4]")
}
: List<Int> 사용으로 타입 추론이 가능하기 때문에 n의 타입이 Int임을 알 수 있음
: 파라미터가 하나일 경우 자동으로 파라미터 이름을 it으로 만들 수 있으므로, n -> 을 사용할 필요가 없음
[ jointToString() ]
: 람다로 컬렉션의 각 원소를 String으로 변환 후 String을 구분자와 접두사/접미사를 붙여 하나로 합쳐주는 함수
import atomictest.eq
fun main() {
val list = list0f(9, 11, 23, 32)
list.joinToString(" ") {”[$it]” } eq "[9] [11] [23](3)]"
// list.joinToString( separator ="",
// transform = { "[$it]" } eq "[9] [11] [23](3)]" // 위와 동일
}
[ mapIndexed() ]
: list의 원소와 원소의 인덱스를 함께 람다에 전달하면서 각 원소를 변환
: 전달할 람다는 인덱스와 원소를 파라미터로 받아야 함
: 특정 인자를 사용하지 않는 경우 밑줄(_)을 사용하며, 밑줄 사용 시 람다가 무슨 인자를 사용하지 않는다는 컴파일 에러 무시가 가능
import atomictest.eq
fun main() {
val list = listOf('a', 'b','c')
list.maplndexed { index, element ->
"[$index: $element]"
} eq listOf("[0: a]" "[1: b]", "[2: c]")
// 특정 인자 사용 x
list.maplndexed { index, _ ->
"[$index]"
} eq listOf("[이", "[1]", "[2]")
}
[ indices ]
: mapIndexed()를 항상 indices와 map()으로 대신 불가능
: IntRange 타입의 값을 반환
import atomictest.eq
fun main() {
val list = listOf('a', 'b', 'c')
list.indices.map {
"[$it]"
} eq listOf("[0]", "[1]", "[2]")
}
'공부 자료 > 코틀린[Kotlin]' 카테고리의 다른 글
[Atomic 46] 컬렉션에 대한 연산 (0) | 2024.02.21 |
---|---|
[Atomic 45] 람다의 중요성 (0) | 2024.02.21 |
[Atomic 43] break와 continue (3) | 2024.02.21 |
[Atomic 42] 확장 프로퍼티 (0) | 2024.02.21 |
[Atomic 41] 제네릭스 소개 (0) | 2024.02.21 |