Kotlin笔记

文章链接:http://www.liuschen.com

初次尝试,安装了IntelliJ IDEA

新建Kotlin JVM项目,新建包并新建main.kt

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

fun main(args: Array<String>) {
    printSum(-1, 8)
}

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

由此可见,函数的关键字区别为:

  • Kotlin:fun
  • Python:def
  • Java :没有,直接函数名

函数参数和返回值:

  • Kotlin:类型都放在后面,如参数args: Array类型在参数后面,“:”隔开
  • Python:没有类型,直接交给程序自己判断
  • Java :类型在前,参数在后

返回值为空:

  • Kotlin:Unit
  • Python:返回值类型是程序判断,不需要声明
  • Java :void

输出语句的不同:

  • Kotlin:println,可以直接在$后引用变量,如下:

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

  • Python:print,通过占位符引入变量,中间由“%”隔开
  • Java :直接通过“+”来拼接字符串

变量的声明:

  • Kotlin:val关键字用来定义只读的局部变量,var用来定义可变变量
  • Python:变量不需要声明,自动判断类型
  • Java :变量需要声明,而且有些时候必须有初始值

Kotlin中,写法有点像Python,每句程序的结尾不需要写“;”,通过换行符来区分语句。
但是python中制表符和空格是会区分开,写程序时如果混用是可能会出错的,KotLin
目前还没有这种尝试,不知会不会一样。

Kotlin中的条件语句:

if (){}

和java一样,而Python则是:

if 条件表达式:
	条件语句

完全是用过换行与缩进来完成语句的书写的。

Kotlin新定义了一个?,如Int?表示声明的这个类型值可以为null,这个值可以是返回值,也可以为声明的变量。

java中的instanceof用来判断一个对象是否是一个类的实例,Kotlin直接用“is”来代替,简单直观。如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换。如(看来obj会在obj is String为true时自动转化为String类型):

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // `obj` 在该条件分支内自动转换成 `String`
        return obj.length
    }
    // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
    return null
}

for循环:

  • Kotlin:for(obj in list){}
  • Python:for obj in list:
  • Java :for(Obj obj:list){}//高级for

Kotlin中的when表达式同Java中的不同,更像是Java中的switch语句(其中的函数赋值也同js中的语法很像,但js是弱类型的脚本语言,而Kotlin是同Java一样的强类型的高级编程语言):

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

Python能够通过for循环直接遍历字符串,Kotlin不能,但是Kotlin中的区间比Python表达的更简洁:

if (x in 1..y+1) {
    println("fits in range")
}

检测数字在区间之外用“!in”:

if (-1 !in 0..list.lastIndex) {
    println("-1 is out of range")
}

倒序遍历:

for (i in 4 downTo 1) print(i)

步长为2的遍历:

for (i in 1..4 step 2) print(i)

要创建一个不包括其结束元素的区间:

for (i in 1 until 10) {   // i in [1, 10) 排除了 10
 	println(i)
}

而在Python遍历区间:

for i in range(1,99):
	print "%d" % i
Loading Disqus comments...
Table of Contents