Kotlin基础06

本文介绍了Kotlin编程中的多重声明语法,如何通过它同时创建并使用多个变量,以及如何在数据类、Map、Range和Progression等上下文中应用这一特性,包括函数返回值处理和区间操作的工作原理。
摘要由CSDN通过智能技术生成
多重声明
有时候可以通过给对象插入多个成员函数做区别是很方便的,比如:
val (name, age) = person
这种语法叫多重声明。多重声明一次创建了多个变量。我们声明了俩个新变
量: name age 并且可以独立使用:
println(name)
println(age)
多重声明被编译成下面的代码:
val name = persion.component1()
val age = persion.component2()
component1() component2() 是另一个转换原则的例子。任何类型都可以在多
重分配的右边。当然了,也可以有 component3() component4() 等等
多重声明也可以在 for 循环中用
for ((a, b) in collection) { ... }
参数 a b component1() component2() 的返回值
例子:一个函数返回俩个值
要是一个函数想返回俩个值。比如,一个对象结果,一个是排序的状态。在 Kotlin
中的一个紧凑的方案是声明 data 类并返回实例:
data class Result ( val result : Int , val status : Status)
fun function (...) : Result {
//...
return Result(result, status)
}
val (result, status) = function(...)
数据类自动声明 componentN() 函数
注意:也可以使用标准类 Pair 并让函数返回 'Pair' ,但可读性不是很强
例子:多重声明和 Map
转换 map 的最好办法可能是下面这样:
for ((key, value) in map) {
}
为了让这个可以工作,我们需要
通过提供 iterator() 函数序列化呈现 map 通过 component1()
component1() 函数是把元素成对呈现
事实上,标准库提供了这样的扩展:
fun <K, V> Map<K, V>. iterator () : Iterator<Map.Entry<K, V>> = ent
rySet () . iterator ()
fun <K, V> Map.Entry<K, V>. component1 () = getKey ()
fun <K, V> Map.Entry<K, V>. component2 () = getValue ()
因此你可以用 for 循环方便的读取 map ( 或者其它数据集合)
Ranges
range 表达式是通过 rangeTo 函数形成的。 rangeTo 函数拥有形如 .. 的操作符,该
操作符是用 in !in 实现的。 Range 可以对任何可比较的类型做操作,但对整数
基本类型是优化过的。下面是些例子:
if (i in 1..10 ) {
println(i)
}
if (x ! in 1.0 . .3.0 ) println(x)
if (str in "island" .. "isle" ) println(str)
数字的范围有个附加的特性:它们可以迭代。编译器会把它转成类似于 java for
循环的形式,且不用担心越界:
for (i in 1..4 ) print(i) // prints "1234"
for (i in 4..1 ) print(i) // prints nothing
for (x in 1.0 . .2.0 ) print( "$x " ) // prints "1.0 2.0 "
如果你想迭代数字并想反过来,这个相当简单,你可以使用 downTo() 函数
for (i in 4 downTo 1 ) print(i)
也可以使用指定步数的迭代,这个用到 step()
for (i in 1..4 step 2 ) print(i) // prints "13"
for (i in 4 downTo 1 step 2 ) print(i) // prints "42"
for (i in 1.0 . .2.0 step 0.3 ) print( "$i " ) // prints "1.0 1.3 1.6
1.9 "
工作原理
在标准库中有俩种接口: Range Progression
Range 表示数学范围上的一个间隔。它有俩个端点: start end 。主要的操作符
contains 通常在 in/!in 操作符内:
Progression 表示一个算数级数。它有一个 start end 以及一个非零 increment
Progression Iterable 的一个子类,因此可以使用在 for 循环中,或者 map filter
等等。第一个元素是 start 下一个元素都是前一个元素的 increment
Progression 的迭代与 java/javaScript for 循环相同:
// if increment > 0
for (int i = start; i <= end; i += increment) {
// ...
}
// if increment < 0
for (int i = start; i >= end; i += increment) {
// ...
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值