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])
}
View Code

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表达式,省去了casebreak,并且支持各种类型。

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) }
原文地址:https://www.cnblogs.com/chhom/p/8328077.html