kotlin基本语法
包的定义与导入
包的定义必须在文件的第一行:
package com.morris.kotlin
import com.morris.demo.*
源文件的路径可以和包的路径不相同,也就说明包名只是一个逻辑名称,例如源码文件HelloKt.kt
所在目录为com.morris.kotlin
,但是其中的包声明可以为com.morris.kotlin2
。
程序的入口点
Kotlin应用程序的入口点为main方法:
fun main() {
println("hello kotlin")
}
也可以携带参数:
fun main(args: Array<String>) {
println("hello kotlin")
}
函数
fun sum(a: Int, b: Int): Int {
return a + b
}
可以省略返回值:
fun sum(a: Int, b: Int) {
a + b
}
还可以简写为一行:
fun sum(a: Int, b: Int) = a + b
如果函数没有返回值,返回类型可以使用Unit代替或者直接省略。
变量
package com.morris.kotlin
val t = 1 // 全局常量
fun main() {
var i = 10 // 常量
val j = 20 // 局部变量
}
注释
// 单行注释
/*
* 多行注释
*/
/*
* /* 注释嵌套 */
*/
字符串模板
var name = "morris"
print("my name is $name")
条件表达式
fun max(a: Int, b: Int): Int {
if(a > b) {
return a
} else {
return b
}
}
也可以简写如下:
fun max(a: Int, b: Int)= if(a > b) a else b
空值与null检查
如果一个方法的返回值有可能返回null,那么必须显示的声明:
fun str2Int(str: String): Int? {
return str.toIntOrNull()
}
fun sum(a: String, b:String): Unit {
var intA = str2Int(a)
var intB = str2Int(b)
if(null == intA) {
print("arg1 is not a number")
return
}
if(null == intB) {
print("arg2 is not a number")
return
}
// 到这里kotlin编译器能自动推断出intA和intB不为null
print(intA + intB)
}
类型检查与自动类型转换
fun getStrLength(obj: Any): Int? {
if(obj !is String) return null
return obj.length
}
for循环
val items = listOf("apple", "banana", "kiwifruit")
for (item in items) {
println(item)
}
for(i in items.indices) {
println("item at $i is ${items[i]}")
}
while循环
val items = listOf("apple", "banana", "kiwifruit")
var i = 0
while(i < items.size) {
println("item at $i is ${items[i++]}")
}
when表达式
fun choose(i: Int): Char =
when (i) {
1 -> 'A'
2 -> 'B'
3 -> 'C'
else -> 'G'
}
范围in
var x = 1
var y = 10
if(x in 1..y) {
println("$x is in 1..y")
}
for (i in 0..9 step 3) {
println(i)
}
for (x in 9 downTo 0 step 3) {
println(x)
}
集合操作
val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
fruits.filter { it.startsWith("a") }.sorted().map { it.toUpperCase() }.forEach { println(it) }
创建对象
var str = String()