1.kotlin笔记_基础操作

1.null检查
1.1

private var am_btn: Button? = null
    private var am_tv: TextView? = null    
    private fun initView() {
        am_btn = findViewById(R.id.am_btn) as Button
        //am_tv = findViewById(R.id.am_tv) as TextView

        setListener()
    }

    private fun setListener() {
        am_btn?.setOnClickListener {
            am_tv?.text = "ssssss"
            toast("sss")
        }
    }

例如上面代码,如果用传统java写法,当am_btn为null时,运行会直接闪退,得在am_btn.setOnclickListener前判空,如果不为空才能setListener,而用kotlin的?判空方式,直接在am_btn后加个?,意思是如果am_btn为Null,就不执行后面的setOnClickListener()方法了; 再看里面的am_tv.setText()方法,am_tv为null,程序依然会闪退,但是加了?检查后,如果am_tv为null,就不会执行后面的setText逻辑,不过下面一行的toast(“sss”)是会正常执行的。

1.2

private fun setListener() {
        val a:Int? = null
        val str = a?.toString() ?: "123"
        am_btn?.setOnClickListener {
            am_tv!!.text = "ssssss"
            toast(str)
        }
    }

如果a为null或a.toString为null,str就赋值为”123”;
也可以这样用:

val myString = a?.toString() ?: return false

val myString = a?.toString() ?: throw IllegalStateException()

1.3
图
上面已经通过private var am_btn: Button? = null 声明这个am_btn变量是可Null变量了,所以下面在使用时如果不加任何检查,就会直接报错,不能通过编译,这时如果确定am_btn不为Null,可以写成这样跳过编译检查:

am_btn!!.setOnClickListener{ }

这样虽然可以编译通过,但是在运行时万一am_btn为null,程序依然会闪退。如果一份代码时充斥着!!,说明很多地方没有被正确处理。

1.4 let操作符

//Java
if (currentUser != null) {
    text.setText(currentUser.name)
}

//instead Kotlin
user?.let {
    println(it.name)
}

2.字符串模板

        var a = 1
        val s1 = "a is $a" //直接获取a的值
        a = 2
        val s2 = "${s1.replace("is", "was")}, but now is $a" //在大括号里可写表达式
        println(s1)//a is 1
        println(s2)//a was 1, but now is 2

3.条件判断
3.1 if

        val a = 1
        val b = 2
        println(if (a>b) a else b)

输出a和b中大的值,因为if判断可以直接返回值,所以kotlin就用if直接代替了三元运算符了。

3.2 for

    fun test3(args: Array<String>) {
        for (name in args)//相当于java的增强for循环
            println("Hello, ${name}!")

        for (i in args.indices) {//带下标的for循环
            println("Hello, ${args[i]}!")
        }
    }

3.3 when

    fun test4(args: Array<String>) {
        val args = arrayOf("FR","EN")
        val language = if (args.isEmpty()) "EN" else args[0]
        println(when (language) {
            "EN" -> "Hello!"
            "FR" -> "Salut!"
            "IT" -> "Ciao!"
            else -> "Sorry, I can't greet you in $language yet"
        })

        val listOf = listOf<Int>(0, 1, 2)
        when {
            1 in listOf -> println("found 1")
            3 in listOf -> println("found 3")
        }
    }

运行结果:
Salut!
found 1

3.5 while

        var i = 0
        while (i < 5) {
            println(i++)
        }

3.6 ranges

fun test6(){
        for (x in 1..3) {
            print(x) //1 2 3
        }
        println()
        for (x in 1..10 step 2) {
            print(x)//13579
        }
        println()
        for (x in 10 downTo 1 step 2) {
            print(x)//10 8 6 4 2
        }
    }

猜你喜欢

转载自blog.csdn.net/aislli/article/details/80136653