Android Kotlin学习--基础语法

来源:互联网 发布:逗屋网络 编辑:程序博客网 时间:2024/06/05 00:16

一、函数

定义一个函数,接受2个int型参数,返回2数之和为int

:Int 表现为类型。
去除了“;”符号。

fun sum(a:Int = 1,b:Int = 2):Int{    return a+b}

只有一个表达式作为函数体,以及自推导型的返回值:

fun sum(a: Int, b: Int) = a + b

二、常量与变量

在Kotlin中常量用val声明,变量用var声明。

常量(个人觉得,正常写就用21val a: Int = 1  // 立刻赋值val b = 2   // `Int` 类型是自推导的val c: Int  // 没有初始化器时要指定类型c = 3       // 推导型赋值变量var x = 5 x += 1

三、When 表达式

when子式可以是常量、变量、返回数值的表达式、返回Boolean值的表达式。

when (x) {    1 -> print("x == 1")    //可以用任意表达式作为分支的条件    parseInt(s) -> print("s encode x")    //分支可以用同样的方式处理的话,分支条件可以连在一起    2,3 -> print("x == 3 or x == 4")    //可以用 in 或者 !in 检查值是否值在一个范围或一个集合中    in 1..10 -> print("x is in the range")//范围    !in 10..20 -> print("x is outside the range")    in validNumbers -> print("x is valid")//集合    else -> {        print("x is neither 1 nor 2")    }}

when 也可以用来代替 if-else if 。
如果没有任何参数提供,那么分支的条件就是简单的布尔表达式,当条件为真时执行相应的分支。

when {    x.isOdd() -> print("x is odd")    x.isEven() -> print("x is even")    else -> print("x is funny")}

四、for语法

基本循环

for(int i = 0; i < 10; i++){    // ...}//变为for (i:Int in 0..9){    // ...}

使用指定步数的迭代,这个用到 step()

for (i in 1..4 step 2) print(i) // prints "13"for (i in 4 downTo 1 step 2) print(i) // prints "42"for (i in 1.0..2.0 step 0.3) print("$i ") // prints "1.0 1.3 1.6 1.9 "

如果你想通过 list 的索引进行迭代,你可以这样做:

//递增for(int i = 0; i < list.size(); i++)for (i in list.indices)//递增for(int i = 2; i < list.size(); i++)for (i in 2..list.size-1) 

五、空安全

当 str 中不包含整数时返回空:

fun parseInt(str: String): Int? {    // ...}

在 Kotlin 类型系统中可以为空和不可为空的引用是不同的。
比如,普通的 String 类型的变量不能为空:

var a: String ="abc"a = null //编译错误//允许为空,我们必须把它声明为可空的变量var b: String? = "abc"b = null//不出错

现在你可以调用 a 的方法,而不用担心 NPE 异常了:

val l = a.length()

但如果你想使用 b 调用同样的方法就有可能报错了:

val l = b.length() //错误:b 不可为空

但我们任然想要调用方法,有些办法可以解决。
第一个选择就是在条件中检查 null

val l = if (b != null) b.length() else -1

第二个选择就是(安全调用)使用安全操作符“?.”

b?.length()//如果 b 不为空则返回长度,否则返回空。这个返回类型是 Int?//安全调用在链式调用是是很有用的。//比如,如果 Bob 是一个雇员可能分配部门(也可能不分配),如果我们想获取 Bob 的部门名作为名字的前缀,就可以这样做:bob?.department?.head?.name//这样的调用链在任何一个属性为空都会返回空。

第三个选择是 NPE-lovers。我们可以用 b!! ,这会返回一个非空的 b 或者抛出一个 b 为空的 NPE

val l = b !!.length()