본문 바로가기

공부 자료/코틀린[Kotlin]

[Atomic 44] 람다

이해하기 쉬운 간결한 코드 작성을 위한 람다

 

 

오늘은 람다에 대한 학습을 다루는 아톰이다.

람다는 자바에서도 잠깐 다뤄보기는 했지만 많이 사용하지는 않았었는데, 코틀린에서는 어떻게 쓰이는지 알아보자

 


 

[ 람다 ]

 

람다

: 부가적인 장식이 덜 들어간 함수로, 함수 리터럴이라고 불리기도 함

: 이름이 없고, 함수 생성에 필요한 최소한의 코드만 필요

: 다른 코드에 람다를 직접 삽입할 수 있음

: 중괄호({}) 사이에 작성하며, 파라미터 목록과 함수 본문 사이에 -> 가 들어감

: 타입 추론도 가능

: 람다에 파라미터가 없는 경우가 존재하며, 이 경우 화살표를 남겨두는 것이 아닌 화살표 사용을 하지 않는 것을 권장

 

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