您的位置:首页 > 其它

Kotlin官方参考整理——02.基础

2017-06-29 22:06 267 查看

2 基础

2.1 数据类型

Java中有基本数据类型(byte、short、int、long、float、double、char、boolean)和引用型数据类型(类,包括Integer等)。

Kotlin中只有引用型数据类型,这意味着,Kotlin中的任何常量或变量,其本质都是对象或者对象的引用,这意味着我们可以通过“.”来调用其方法或访问其属性:

var a:Int = 1
a.toString()//还可以a.toByte()、a.toShort()...等
1.toString()//还可以1.toByte()、1.toShort()...等


类型说明
Byte字节整型
Short短整型
Int整型
Long长整型
Char字符型
String字符串
Float单精度实型
Double双精度实型
Boolean布尔型

2.1.1 整型

需要注意的是,较小的类型并不能隐式换转为较大的类型,如:

val b: Byte = 1
//val i: Int = b        //不允许,编译报错
val i: Int = b.toInt()  //显式类型转换


Kotlin中的位运算符和Java中不同,详见官方参考。

2.1.2 数组

Kotlin中数组对应的类型是
Array<T>


创建数组主要有3种方式:

//通过列举初始值来创建一个数组
//arrayOf是Kotlin的库函数
var array1:Array<Int> = arrayOf(1, 2, 3, 4, 5, 6)
//创建一个初始值为空的数组
//arrayOfNulls是Kotlin的库函数
var array2:Array<Int?> = arrayOfNulls<Int>(10)
//创建了一个10个元素的数组,其中的元素被初始化为0,1,4,9...
//使用的是Array<T>构造函数:public inline constructor(size: Int, init: (Int) -> T)
var array3:Array<Int> = Array(10, { i -> i * i })


此外,Kotlin还提供了ByteArray 、ShortArray 、IntArray等,它们比
Array<Byte>、Array<Short>、Array<Int>等
有更高的效率,使用方法和
Array<Byte>、Array<Short>、Array<Int>等
一样。

2.1.3 字符串

已整理至《01开始.md》

2.2 包

已整理至《01开始.md》

2.3 控制流

2.3.1 if

已整理至《01开始.md》

2.3.2 when

已整理至《01开始.md》

2.3.3 for循环

已整理至《01开始.md》

2.3.4 while循环

已整理至《01开始.md》

2.3.5 返回与跳转

在Kotlin中return break continue也都是表达式,其含义与Java中一致:

return:从直接包围它的函数返回

break:跳出直接包围它的循环

continue:继续下一次直接包围它的循环

而在kotlin中,可以通过标签来指定要跳转到和返回的位置

在Kotlin中任何表达式都可以用标签来标记。标签的格式为标识符后跟@符号,例如:abc@ 、fooBar@。标签放在被标记的表达式之前:

loop@ for (i in 1..100) {
for (j in 1..100) {
if (……) break@loop  //loop@被标记在外层for循环上,因此break会直接跳出外层for循环
}
}


Kotlin中函数定义可以嵌套。

return配合标签使用,最重要的一个用途就是从lambda表达式中返回:

fun foo() {
ints.forEach {
if (it == 0) return
print(it)
}
}


这个return表达式从最直接包围它的函数即foo中返回(注意,只有内联的lambda表达式支持这种非局部的返回,即不带标签的return,详见《04函数和lambda表达式.md》->“在lambda表达式中使用非局部返回”)。如果我们需要从lambda表达式中返回,我们必须给它加标签:

fun foo() {
ints.forEach lit@ {
if (it == 0) return@lit
print(it)
}
}


现在,它只会从lambda表达式中返回。通常情况下使用隐式标签更方便,该标签与接受该lambda的函数同名:

fun foo() {
ints.forEach {
if (it == 0) return@forEach
print(it)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: