Kotlin-25.解构声明(Destructuring Declaration)
来源:互联网 发布:手机淘宝里怎么开网店 编辑:程序博客网 时间:2024/05/02 01:04
官方文档: http://kotlinlang.org/docs/reference/multi-declarations.html
1.解构声明的概念和作用(destructuring declaration)
把一个对象成员解构(destructure)成多个变量,称为解构声明(destructuring declaration),component1(),component2()等函数是Kotlin约定的操作符(类似+ - * / for等操作符)componentN是操作符(类似加减乘除的运算符),重载操作符必需要用operator修饰以允许使用!解构声明componentN函数的定义如下: class User(val first: String, val second: String) { //componentN是操作符,重载它,必须添加operator修饰符 operator fun component1(): String { return first } operator fun component2(): String { return second } } fun main(args: Array<String>) { //解构声明会创建多个变量,可独立使用 val (f, s) = User("lioil", "win") println("$f, $s") //输出"lioil", "win" }
1.数据类(data class)
编译器会为数据类(data class)自动声明/定义componentN()函数,可直接用解构声明! data class User(val name: String, val id: Int) fun main(args: Array<String>) { val u = User("lioil.win", 1) //传统用法 println("${u.name}, ${u.id}")//输出: lioil.win, 1 //解构声明 val (n, i) = u println("$n, $i")//输出: lioil.win, 1 //直接调用componentN函数 println("${u.component1()}, ${u.component2()}") }
2.函数返回多个变量(Return Values)
如果需要一个函数返回多个变量,Kotlin最简洁的实现是声明一个数据类并返回其实例对象,数据类(data class)自动声明/定义componentN()函数,无需我们定义! data class Result(val result: Int, val status: Status) fun deFun(...): Result { return Result(result, status) } //函数直接返回多个变量,非常方便使用 val (result, status) = deFun(...)
3.for循环-解构声明
collection的元素类必须要声明component1()、component2()等函数 for ((a, b) in collection) { print(a) ... }
4.映射Map-解构声明
在kotlin标准库(standard library)提供以下扩展: //iterator()用于map迭代遍历(循环) operator fun <K, V> Map<K, V>.iterator(): Iterator<Map.Entry<K, V>> = entrySet().iterator() //component1、component2用于解构Map.Entr对象,获取键值对(key,value) operator fun <K, V> Map.Entry<K, V>.component1() = getKey() operator fun <K, V> Map.Entry<K, V>.component2() = getValue()Map解构声明的实例: fun main(args: Array<String>) { val map = hashMapOf<String, Int>() map.put("one", 1) map.put("two", 2) //(key, value) in map for ((key, value) in map) { println("key = $key, value = $value") } }
2.自kotlin 1.1起的新特性
1.下划线_未使用变量(Underscore unused) 如果在解构声明中不需要使用某个变量,那么可用下划线_取代: val (_, status) = getResult()2.lambda表达式参数解构(Destructuring Lambda) 如果lambda表达式参数类型是Pair/Map.Entry或具有componentN函数的类型, 那么lambda表达式参数可以使用解构声明: map.mapValues { entry -> "${entry.value}!" } map.mapValues { (key, value) -> "$value!" } 多个参数和一个解构的区别: { a -> …… } //一个参数 { a, b -> …… } //两个参数 { (a, b) -> …… } //一个解构对 { (a, b), c -> …… } //一个解构对,一个参数 解构的参数未使用,用下划线取代,以免编造新名: map.mapValues { (_, value) -> "$value!" } 可以指定解构的参数类型: map.mapValues { (_, value): Map.Entry<Int, String> -> "$value!" } map.mapValues { (_, value: String) -> "$value!" }
简书:http://www.jianshu.com/p/8f7cb57f4009
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/74078507
GitHub博客:http://lioil.win/2017/07/01/Kotlin-destructure.html
Coding博客:http://c.lioil.win/2017/07/01/Kotlin-destructure.html
阅读全文
0 0
- Kotlin-25.解构声明(Destructuring Declaration)
- Kotlin 其他(一) --- 解构声明(Destructuring Declarations)
- Kotlin学习(十五): 解构声明(Destructuring Declarations)
- Kotlin-解构声明
- Kotlin-解构声明
- Kotlin解构声明
- Destructuring (解构)
- Rust - Destructuring 解构
- ES6 destructuring 解构赋值
- Kotlin语法(二十)-变形声明(Destructuring Declarations)
- android kotlin其它(一)解构声明
- Kotlin学习笔记(十)解构声明
- clojure解构(clojure destructuring)
- clojure解构(clojure destructuring)
- JS之解构( Destructuring)
- ECMA-Script6之Destructuring 解构
- 术语:Destructuring assignment (解构赋值)
- 深入浅出ES6(六):解构 Destructuring
- laravel框架即点击改,批量删除,更新日志
- tf教程(六):Time travel with tf
- 分享几个查找小图标的网站,以下几个网站都可以搜索图标,可以下载png、jpg、gif、icon等格式,而且包含多个尺寸,背景颜色,做网页设计的一定要收藏哟。
- ubuntukylin中vim插件自动补全安装
- nginx下运行php的程序时返回200访问却是空白页问题的解决方法
- Kotlin-25.解构声明(Destructuring Declaration)
- eclips快捷键
- Html5与Css3颜色和选择器(五)
- Redis4.0源码解析--3种线性表
- 异常处理
- 不同浏览器中URL的编码方式
- HTML5 form input 文本框新加的类型
- DMA+ADC单通道转换、多通道转换
- swoole安装 以及简单的聊天功能