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()