Android

[Android] 코틀린(Kotlin) 표준 라이브러리 함수(Standard Library Functions)

구루싸 2020. 4. 26. 17:44
반응형
SMALL

따뜻한 날씨가 지속되다가 강풍이 매일 불고 있네요-_-

드라이 맡기고 옷장으로 들어간 옷이 다시 나오게 된 상황ㅜ.ㅜ

환절기에 감기들 조심하시고 오늘도 학습을 이어가도록 하겠습니다

오늘은 코틀린의 표준 라이브러리 함수 몇가지를 알아보도록 하겠습니다

import java.io.File

private fun nameIsLong(name: String) = name.length >= 20
private fun playerCreateMessage(nameTooLong: Boolean): String {
    return if ( nameTooLong ) {
        "Name is too long. Please choose another name."
    } else {
        "Welcome, adventurer"
    }
}

fun main(args: Array<String>) {
    /*
    val menuFile = File("menu-file.txt")
    menuFile.setReadable(true)
    menuFile.setWritable(true)
    menuFile.setExecutable(false)
     */
    val menuFile = File("menu-file.txt").apply {
        setReadable(true)
        setWritable(true)
        setExecutable(false)
    }
    /*
    val firstElement = listOf(1,2,3).first()
    val firstItemSquared = firstElement * firstElement
     */
    val firstItemSquared = listOf(1,2,3).first().let {
        it * it
    }
    "Polarcubis, Supreme Master of NyetHack"
            .run(::nameIsLong)
            .run(::playerCreateMessage)
            .run(::println)
    val nameTooLong = with("Polarcubis, Supreme Master of NyetHack") {
        length >= 20
    }
    val fileContents: List<String>
    File("file.txt")
            .also {
                print(it.name)
            }.also {
                fileContents = it.readLines()
            }
    /*
    val fileContent = File("myfile.txt")
            .takeIf { it.canRead() && it.canWrite() }
            ?.readText()
    */
    val fileContent = File("myfile.txt")
            .takeUnless { it.isHidden }
            ?.readText()
}

위의 코드에서 apply 함수를 사용하면

수신자(File 객체)를 구성하기 위해 수행되는

모든 함수 호출에 필요한 참조 변수(menuFile) 이름을 생략할 수 있습니다

왜냐하면 람다 내부에서 해당 수신자에 대한

모든 함수 호출이 가능하도록 apply 함수가 사용 범위를

설정해주기 때문인데 이것을 연관 범위(relative scoping)

또는 수신자에 대한 암시적 호출(implicitly called)이라고 합니다

위의 코드에 사용된 함수들의 쓰임을 이해하기 위해 아래의 표에 요약하였습니다

함수 수신자 객체를 람다의 인자로 전달하는가? 연관 범위를 제공하는가? 반환
let X 람다의 결과
apply X 수신자 객체
run X 람다의 결과
with X 람다의 결과
also X 수신자 객체
takeIf X 수신자 객체의 null 가능
takeUnless X 수신자 객체의 null 가능

 

표준 함수를 사용하면 코드를 간결하게 작성할 수 있으며

코틀린 특유의 코드 작성 감각을 살릴 수 있습니다

코틀린을 계속해서 사용하다보면 익숙해지겠죠?-_-

아무튼 오늘의 학습은 여기서 마치겠습니다~

그럼 이만-_-

 

반응형
LIST