Kotlin 学习(1)
本文出自链接:https://www.jianshu.com/p/ef9584a8ebf8
Kotlin的插件安装:
Settings->Plugins->Browse Repositories->搜索Kotlin
Kotlin语法:
1、定义函数:
与Java定义函数的区别在于:Kotlin在定义函数的时候要加fun关键字,函数的返回值前后不同,java的在前面,如
private int getResult(int a, int b) { return a + b; }
Kotlin的返回值在后面:
private getResult(a: Int, b: Int): Int { return a + b }
如果一个函数只有一个表达式函数体并且是返回类型自动推断的话,可以直接这样写
fun getResult(a: Int, b: Int) = a + b // 这里的函数没有写返回值,以为Kotlin会自动判断返回值类型
如果函数返回一个无意义的值,相当于Java的void
,则可以这样写
fun getResult(a: Int, b: Int) { print(a + b) }
2、定义局部变量
Kotlin声明变量与Java声明变量有些不一样,Java变量类型在前,变量名在后,而Kotlin则相反,变量名在前,变量类型在后,中间加:(冒号),并且Kotlin可以自动判断变量的类型。
声明局部常量(常量使用val
关键字)
val a: Int = 1 val b = 1 // 自动判断出Int类型 val c: Int // 当没有初始化值的时候要声明类型,全局变量不能这样写 c = 1 // 赋值
声明变量(变量使用var
关键字)
var x = 5 // 自动推断出Int类型 x += 1
3、注释和java一样,当行注释和块注释 // 和/** **/
4、使用字符串模板
使用${变量},如变量为args: Array<String>
,使用的时候可以这样写
fun main(args: Array<String>) { if (args.size == 0) return print("First argument: ${args[0]}") }
而不用再去用加号加起来,gradle
里面也是支持的
fun main(args: Array<String>) { if (args.size == 0) return print("First argument: " + args[0]) }
5、使用可空变量和空置检查(Using nullable values and checking for null)
当一个变量、函数可能出现空值的时候,应该指出该引用可空,如
fun getResult(a: Int, b: Int): Int? { // 设置函数返回类型可空 print(a + b) return null }
6、使用类型检查和自动转换(Using type checks and automatic casts)
is
运算符是检查一个表达式是否是某个类型的实例,如果为不可变局部变量或属性进行类型检查,则无需显式转换
fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj`在这个分支中自动转换为`String`类型 return obj.length } // `obj`仍然是`Any`类型 return null }
7、使用for
循环
fun main(args: Array<String>) { for (arg in args) { // in操作符可以判断是否arg是否在args里面 print(arg) } }
或者
for (i in args.indices) { print(args[i]) }
8、使用when
表达式
when
表达式就相当于Java的switch
表达式,省去了case
和break
,并且支持各种类型。
fun cases(obj: Any) { when (obj) { 1 -> print("One") //如果obj的值为1 "Hello" -> print("Greeting") // 如果obj的值为hello is Long -> print("Long") // 如果obj的类型是Long类型 !is String -> print("Not a string") // 如果obj的类型不属于String类型 else -> print("Unknown") // 默认,相当于switch的default } }
9、使用ranges
使用in运算符检查数字是否在范围内,使用!in运算符检查数值是否在范围外
if (x in 1..y-1) { //1..y-1表示1到y-1的范围 print("OK") } for (i in 1..100) { ... } // 1到100范围 for (i in 1 until 100) { ... } // 半开范围,不包括100,相当于[1,100) for (x in 2..10 step 2) { ... } // 每次夸2,内容为2,4,6,8,10 for (x in 10 downTo 1) { ... } // 返序 if (x in 1..10) { ... }
10、使用集合
循环输出一个集合里面的值或者判断集合里面是否包含某个变量
for (name in names) { // 将会调用nemes.contains(name)方法 println(name) }
使用lambda表达式过滤和映射集合
// it表示name names .filter { it.startsWith("A") } .sortedBy { it } .map { it.toUpperCase() } .forEach { print(it) }