Kotlin 학습 노트 (2) - 예시 편 3

6243 단어 Kotlin
이 편 은 계속 Kotlin 언어의 데모 에 따라 Kotlin 의 사용 을 배 웁 니 다!본 고 는 이전 글 에 이 어 계속 공부 하고 있 습 니 다. 만약 에 모 르 는 것 이 있 으 면 이전 글 을 참고 하여 링크 주 소 를 참고 하 십시오.http://try.kotlinlang.org/#/Examples/Multi-declarations%20and%20Data%20classes/Multi-declarations/Multi-declarations.kt
예시 1
/** * This example introduces a concept that we call mutli-declarations. * It creates multiple variable at once. Anything can be on the right-hand * side of a mutli-declaration, as long as the required number of component * functions can be called on it. * See http://kotlinlang.org/docs/reference/multi-declarations.html#multi-declarations */

fun main(args: Array<String>) {
    val pair = Pair(1, "one")

    val (num, name) = pair

    println("num = $num, name = $name")
}

class Pair<K, V>(val first: K, val second: V) {
    operator fun component1(): K {
        return first
    }

    operator fun component2(): V {
        return second
    }
}

분석: 상기 코드 에서 클래스 대상 을 정 의 했 습 니 다. 클래스 와 클래스 의 구조 함 수 를 어떻게 만 드 는 지 에 대해 서 는 Data class 글 을 참고 하 십시오.또 다른 문 제 는 코드 val (num, name) = pair 의 사용 에 관 한 것 입 니 다. 코드 를 이렇게 쓰 는 것 은 무슨 뜻 입 니까?참고 문서http://kotlinlang.org/docs/reference/multi-declarations.html#example- returning - two - values - from - a - function, 우리 가 한 함수 방법 에서 두 개의 값 을 되 돌려 야 하 는 것 을 보 세 요. 예 를 들 어:
/**
*     
*/
data class Result(val result: Int, val status: Status)


fun function(...): Result {
    // computations

    return Result(result, status)
}

// Now, to use this function:
val (result, status) = function(...)

데이터 클래스 대상 이 자동 으로 componentN () 함 수 를 생 성하 기 때문에 여 기 는 생 성 되 지 않 았 습 니 다!
NOTE: we could also use the standard class Pair and have function() return Pair
예시 2:
/** * Data class gets component functions, one for each property declared * in the primary constructor, generated automatically, same for all the * other goodies common for data: toString(), equals(), hashCode() and copy(). * See http://kotlinlang.org/docs/reference/data-classes.html#data-classes */

data class User(val name: String, val id: Int)

fun getUser(): User {
    return User("Alex", 1)
}

fun main(args: Array<String>) {
    val user = getUser()
    println("name = ${user.name}, id = ${user.id}")

    // or

    val (name, id) = getUser()
    println("name = $name, id = $id")

    // or

    println("name = ${getUser().component1()}, id = ${getUser().component2()}")
}

분석: 모든 데이터 클래스 대상 은 그 속성 에 대응 하 는 componnent 방법 을 자동 으로 생 성 합 니 다.
예시 3:
/** * Kotlin Standart Library provide component functions for Map.Entry */

fun main(args: Array<String>) {
    val map = hashMapOf<String, Int>()
    map.put("one", 1)
    map.put("two", 2)

    for ((key, value) in map) {
        println("key = $key, value = $value")
    }
}

분석: 이 코드 는 맵 집합 을 만 들 고 맵 집합 값 을 출력 합 니 다!HashMap 을 만 들 고 hashMapOf 방법 을 직접 호출 하면 됩 니 다.옮 겨 다 닐 때 in 문법 으로 옮 겨 다 녀 요!(key, value) 이것 은 하나의 형식 일 뿐 문 자 는 key 와 value 에 제한 되 지 않 습 니 다. (k, v)
예시 4:
/** * Data class gets next functions, generated automatically: * component functions, toString(), equals(), hashCode() and copy(). * See http://kotlinlang.org/docs/reference/data-classes.html#data-classes */

data class User(val name: String, val id: Int)

fun main(args: Array<String>) {
    val user = User("Alex", 1)
    println(user) // toString()

    val secondUser = User("Alex", 1)
    val thirdUser = User("Max", 2)

    println("user == secondUser: ${user == secondUser}")
    println("user == thirdUser: ${user == thirdUser}")

    // copy() function
    println(user.copy())
    println(user.copy("Max"))
    println(user.copy(id = 2))
    println(user.copy("Max", 2))
}

분석: 상기 코드 는 주로 copy 의 사용 을 보 여 줍 니 다. copy 는 복사 대상 에 사용 되 며 복사 과정 에서 대상 의 값 을 바 꿀 수 있 습 니 다! 예 를 들 어 user. copy (id = 2) 는 user 의 id 값 을 바 꾸 었 습 니 다!

좋은 웹페이지 즐겨찾기