반응형
청춘고양이
배움을 기록하는 곳
청춘고양이
전체 방문자
오늘
어제
  • Hello World (119)
    • JQuery (5)
    • In my opinion (4)
    • HTML&CSS (8)
    • JS (9)
    • JAVA (21)
    • Spring Boot (21)
    • Node.js (1)
    • Linux (7)
    • Git (2)
    • Kotlin (4)
    • Fluttor (4)
    • 정보처리기사 (19)
    • AWS (1)
    • Oracle (8)
    • MySQL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • js
  • 객체 안의 함수
  • 제이쿼리 버튼클릭시 색 변경
  • js 패스워드 변경
  • spring 기본설정
  • 청춘고양이
  • js 로또 번호
  • 제이쿼리 패스워드 변경
  • 스크롤js
  • 자바
  • 중복 제거 로또
  • 제이쿼리
  • ScrollEffectJs
  • 자바db연동
  • 초보개발
  • 가위바위보js
  • js 비밀번호
  • 제이쿼리 비밀번호
  • css
  • 쉬프트 연산

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
청춘고양이

배움을 기록하는 곳

Kotlin

#Kotlin 스코프 함수 공식 문서 정리

2022. 11. 9. 21:41
반응형

스코프 함수 관련 공식 문서 예제를 싹 다 적어 봤음.

fun main(args: Array<String>) {
   
   val person = Person("Lee", 25).let {
        it.moveTo("Korea")
        it
    }
    println(person)

    //run 과 let 의 리시버의 차이 run 은 확장 함수로 this 로, let 의 경우는 확장 함수지만 it를 호출 함.
    var str = "Hello"
    str.run {
        println("The String's length: $length")
    }
    str.let {
        println("The String's length is ${it.length}")
    }
    val adam = Person("Adam").apply {
        age = 20
    }
    println(adam)

    fun getRandomInt(): Int {
        return Random.nextInt(100).also {

            writeToLog("getRandomInt() generated value $it")
        }
    }

    val i = getRandomInt()
    println(i)

    val numberList = mutableListOf<Double>()
    numberList.also { println("Populating the list") }
        .apply {
            add(2.71)
            add(3.14)
            add(1.0)
        }
        .also { println("Sorting the list") }
        .sort()

    println(numberList)

    val numbers = mutableListOf<String>("one", "two", "three")
    val countEndWithE = numbers.run {
        add("four")
        add("five")
        //endsWith(): 어떤 문자열에서 특정 문자열로 끝나는지를 확인할 수 있다. 그 결과로는 true 혹은 false 로 반환
        count { it.endsWith("e") }
    }
    println("There ara $countEndWithE elements that ent with e.")

    with(numbers) {
        val firstItem = first()
        val lastItem = last()
        println("First item: $firstItem , last item: $lastItem")
    }

    //지금 있는 문자열을 문자의 길이인 배열로 바꾼뒤 그 값이 3 이상인 것만 걸러줌.
    val resultList = numbers.map { it.length }.filter { it > 3 }
    println(resultList)

    //코틀린 표준 함수를 이용하면
    //resultList 라는 변수를 사용하지 않고 let 을 이용해 this 를 파라미터로 입력해 it를 사용해 프로퍼티에 접근 함
    numbers.map { it.length }.filter { it > 3 }.let {
        println(it)
    }
    //더 짧게 줄이면
    numbers.map { it.length }.filter { it > 3 }.let(::println)

    val str2: String? = "Hello"
    val length = str2?.let {
        println("let() called on $it")
        processNonNullString(it)
        it.length
    }

    val modifiedFirstItem = numbers.first().let { firstItem ->
        println("The first item of the list is $firstItem")
        if (firstItem.length >= 5) firstItem else "!" + firstItem + "!"
    }.uppercase() //uppercase 로 대문자로 찍음

    println("First item after modifications: '$modifiedFirstItem'")
    with(numbers) {
        println("'with' is called with argument $this")
        println("It contains $size elements")
    }

    val firstAndLast = with(numbers) {
        "The first element is ${first()}," +
                "the last element is ${last()}"
    }
    println(firstAndLast)

    val service = MultiportService("https://example.kotlinlang.org", 50)
    val runResult = service.run {
        port = 8080
        query(prepareRequest() + " to port $port")
    }
    val letResult = service.let {
        it.port = 8080
        it.query(it.prepareRequest() + " to port ${it.port}")
    }
    println(runResult)
    println(letResult)


    val hexNumberRegex = run {
        val digits = "0-9"
        val hexDigits = "A-Fa-f"
        val sign = "+-"
        Regex("[$sign]?[$digits$hexDigits]+")
    }
    for (match in hexNumberRegex.findAll("+123 -FFFF !%*& 88 XYZ")) {
        println(match.value)
    }

    numbers.also {
        println("The list elements before adding new one: $it")
    }.add("four")
    
}

class MultiportService(var url: String, var port:Int) {
    fun prepareRequest() : String = "Default request"
    fun query(request: String): String = "Result for query '$request'"
}

fun processNonNullString(str: String) {

}

fun writeToLog(message: String) {
    println("INFO: $message")
}


data class Person(var name: String, var age: Int = 0) {

    fun moveTo(country: String): String {
        println(country)
        return country

    }

}

참조:

https://kotlinlang.org/docs/scope-functions.html#takeif-and-takeunless

반응형
저작자표시 (새창열림)

'Kotlin' 카테고리의 다른 글

#Kotlin 표준 함수 1  (0) 2022.11.09
#Kotlin 수업 정리 2  (0) 2022.11.08
#Kotlin 수업 정리 1  (0) 2022.11.08
    'Kotlin' 카테고리의 다른 글
    • #Kotlin 표준 함수 1
    • #Kotlin 수업 정리 2
    • #Kotlin 수업 정리 1
    청춘고양이
    청춘고양이
    신입개발자

    티스토리툴바