您的位置:首页 > 其它

Kotlin - 开始 - 1 基础语法

2017-06-09 15:45 232 查看

定义包

在源文件的顶部指定包:

package my.demo
import java.util.*
// ...


目录和包不需要匹配,源文件可以放在文件系统中的任何地方。

定义函数

接受两个
Int
参数并返回
Int
类型的函数:

fun sum(a: Int, b: Int): Int {
return a + b
}


用表达式作为函数体,返回类型可推断:

fun sum(a: Int, b: Int) = a + b


返回无意义的值:

fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}


Unit
类型的返回值可以省略:

fun printSum(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}


定义局部变量

一次赋值(只读)局部变量:

val a: Int = 1 // 立即赋值
val b = 2 // Int 类型可推断
val c: Int // 没有提供初始值则需要指定类型
c = 3 // 延迟赋值


可变变量:

var x = 5 // Int 类型可推断
x += 1


注释

如同Java和Javascript,Kotlin支持行内注释和块注释:

// 这是行内注释
/* 这是一个注释块
包含多行 */


与Java不同,Kotlin中块注释可以嵌套。

使用字符串模板

var a = 1
// 在模板中使用简单名称:
val s1 = "a is $a"
a = 2
// 在模板中使用任意表达式:
val s2 = "${s1.replace("is", "was")}, but now is $a"


使用条件表达式

fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}


if
当作表达式使用:

fun maxOf(a: Int, b: Int) = if (a > b) a else b


使用可空(Nullable)进行null检查

一个引用必须显式标明可空,才能接受null值。

如果
str
中不包含数字,就返回null值:

fun parseInt(str: String): Int? {
// ...
}


使用返回可空值的函数:

fun printProduct(arg1: String, arg2: String) {
val x = parseInt(arg1)
val y = parseInt(arg2)
// 使用 x * y 可能引发错误,因为它们可能为null
if (x != null && y != null) {
// 在null检查之后,x、y 自动转换为非空
println(x * y)
} else {
println("either '$arg1' or '$arg2' is not a number")
}
}




// ...
if (x == null) {
println("Wrong number format in arg1: '${arg1}'")
return
}
if (y == null) {
println("Wrong number format in arg2: '${arg2}'")
return
}
// 在null检查之后,x、y 自动转换为非空
println(x * y)


使用类型检查和自动转换

运算符
is
用来检查一个表达式是否是某个类型的实例。如果一个只读局部变量或属性被检查为某个特定类型,则无需再对其进行显式转换:

fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 在此分支中 obj 自动转换为 String 类型
return obj.length
}
// 在包含类型检查的分支之外,obj 仍是 Any 类型
return null
}




fun getStringLength(obj: Any): Int? {
if (obj !is String) return null
// 在此分支中 obj 自动转换为 String 类型
return obj.length
}


甚至这样

fun getStringLength(obj: Any): Int? {
// 在运算符 && 的右边,obj 自动转换为 String 类型
if (obj is String && obj.length > 0) {
return obj.length
}
return null
}


使用
for
循环

val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}




val items = listOf("apple", "banana", "kiwi")
for (index in items.indices) {
println("item at $index is ${items[index]}")
}


使用
while
循环

val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}


使用
when
表达式

fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}


使用范围(Range)

使用
in
运算符检查数字是否在某个范围内:

val x = 10
val y = 9
if (x in 1..y+1) {
println("fits in range")
}


检查数字是否不在某个范围内:

val list = listOf("a", "b", "c")
if (-1 !in 0..list.lastIndex) {
println("-1 is out of range")
}
if (list.size !in list.indices) {
println("list size is out of valid list indices range too")
}


在范围上迭代:

for (x in 1..5) {
print(x)
}


还可以指定步长:

for (x in 1..10 step 2) {
print(x)
}
for (x in 9 downTo 0 step 3) {
print(x)
}


使用集合

在集合上迭代:

for (item in items) {
println(item)
}


使用
in
检查集合是否包含某个对象:

when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}


使用lambda表达式过滤map集合:

fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kotlin 基础语法