跳转至

破坏柯特林中的声明

原文:https://www . geesforgeks . org/destruction-declarations-in-kot Lin/

Kotlin析构声明的形式,为程序员提供了一种处理类实例的独特方式。一个析构声明是一次创建并初始化多个变量的声明。 例如:

val (emp_id,salary) = employee

这多个变量对应于与实例关联的类的属性。这些变量可以按照您想要的任何方式独立使用。

println(emp_id+" "+salary)

析构声明基于组件()函数的概念。析构声明可以定义的变量的数量,类提供这些数量的组件函数,从组件 1(),组件 2()到组件 n()。默认情况下,科特林中的数据类实现组件功能。

编译为以下代码的析构声明:-

val emp_id = employee.component1()
val salary = employee.component2()

从函数返回两个值的科特林程序–

// A sample data class
data class Data(val name:String,val age:Int)

// A function returning two values
fun sendData():Data{
    return Data("Jack",30)
}

fun main(){
    val obj = sendData()
    //  Using instance to access properties
    println("Name is ${obj.name}")
    println("Age is ${obj.age}")

    // Creating two variables using  destructing declaration
    val (name,age) = sendData()
    println("Name is $name")
    println("Age is $age")

}

输出:

名字是杰克 年龄是 30 名字是杰克 年龄是 30

注意:如果要在析构声明中使用,组件函数定义必须在运算符关键字之前。

未使用变量的下划线 有时,您可能想要忽略析构声明中的一个变量。为此,用一个下划线代替它的名字。在这种情况下,不会调用给定变量的组件函数。

lambdas 中的析构声明–

随着 Kotlin 1.1 的到来,析构声明语法也可以用于λ参数。如果一个 lambda 参数有一个 Pair 类型的参数或者其他声明组件函数的类型,那么我们可以通过将它们放在括号中来引入新的参数。规则与上面定义的相同。

使用 lambda 参数的析构声明的 Kotlin 程序–

fun main(){
    val map = mutableMapOf<Int,String>()
    map.put(1,"Ishita")
    map.put(2,"Kamal")
    map.put(3,"Kanika")
    map.put(4,"Minal")
    map.put(5,"Neha")
    map.put(6,"Pratyush")
    map.put(7,"Shagun")
    map.put(8,"Shashank")
    map.put(9,"Uday")
    map.put(10,"Vandit")
    println("Initial map is")
    println(map)
    // Destructuring a map entry into key and values
    val newmap = map.mapValues { (key,value) -> "Hello ${value}" }
    println("Map after appending Hello")
    println(newmap)
}

输出:

初始地图为 {1=Ishita,2=Kamal,3=Kanika,4=Minal,5=Neha,6=Pratyush,7=Shagun,8 = Shashank,9=Uday,10=Vandit} 追加 Hello 后的地图{1=Hello Ishita,2=Hello Kamal,3=Hello Kanika,4=Hello Minal,5=Hello Neha,6=Hello Pratyush,7=Hello Shagun,8=Hello Shashank,9=Hello Uday,11

如果析构参数的一个组件没有被使用,我们可以用下划线替换它,以避免调用组件函数:

map.mapValues { (_,value) -> "${value}" }

我们一直在努力

apachecn/AiLearning

【布客】中文翻译组