Kotlin笔记
初次尝试,安装了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