Kotlin一系列文章是笔者的学习笔记。会把要点都一一列出来,但是这些要点是构建在笔记自身知识体系之上,对你可能不适合。比如笔者写过java, 也写过C#,会和他们比较。

  • val与var, val就是C# 的readonly
  • 三重引号(“”“)相当于C# 的@”“,用来转义。
  • 模板表达式:字符串中有${  }, 那么可以在里面写代码。
  • 没有三元运算符,可以用if(a>b) a else b替换。  很怪的用法。if语句成了可以有返回值的方法了。
  • unit类型
  • when表达式, 相当于switch case; 最后的else就是default. 更加灵活。in和!in , 用于表达是否在某个集合里面。类型必须和when中输入相同。

when(x){

        -1, 0 -> {表达式0}

        1 -> {表达式1}

        is Int -> {表达式2}

        is Int -> {表达式2}

        else ->{

}

}

  • for循环

for(i in 1 .. 100){} 从1到100, 1和100也包括

for(i in 1 until 100){ }从1到100, 1包括,100不包括

for(i in 1 .. size){ }

for(i in 1 until size){ }

for (index in 1..100 step 2){

      print(index)//会输出1..3..5

}

用indices

val array = arrayOf("a", "b", "c")
        for (index in array.indices){
            println("index=$index")//输出0,1,2
        }

  • foreach 循环,用indices和withindex,可以完成下标遍历。
val array = arrayOf("a", "b", "c")
        for (element in array){
            println("element=$element")//输出a,b,c
        }

val array = arrayOf("a", "b", "c")

for ((index,e) in array.withIndex()){

      println("下标=$index----元素=$e")

}

  • while()和do{}while()和java一样。
  • return语句, 特殊的地方,可以直接用=符号来直接返回一个函数的值。

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

fun max(a:Int, b:Int) = if(a>b) a else b

甚至可以这样调用:

val f = fun(a:Int, b:Int) = a+b

还有一个特别情况:

val f = fun(a:Int, b:Int) = {a+b} //和上面不同的是,方法体加了大括号, 从此返回的是函数指针。不再是a加b的结果。
f.invoke(1,1) //这时调用方式

任何表达式都可以用标签(label)来标记。 依赖标签跳转。这是什么垃圾一样的功能,和C语言的goto一样。项目中绝对不允许使用。容易乱。

val intArraies = intArrayOf(1, 2, 3, 4, 5)
intArraies.forEach here@{
    if (it == 2) {
        return@here
    }
}

如果是接受lamda表达式的地方,默认就有标签,名字是方法名, 比如上面forEach,默认标签是forEach@

intArraies.forEach { if (it == 2) { return@foreach} }

  • this关键字

特别的地方,就是可以用标签。这个java不一样, java是类名.this来表示。

class outer{

inner class inner{

this@outer // 这个this就是outer对象。

this@inner // 这个this就是inner对象。

}

}

  • super关键字和java一样
  • elvis操作符,就是精简三元运算符的一种

java的方式:

Object a = null;

Object b= (a!=null)?a;new Object()

Kotlin的方式

Object b = a?:new Object()

  • infix函数,可以增加可读性

infix fun Int.add(x: Int): Int { return this + x }

println(100 add 200)

输出是300

  • 扩展函数/扩展属性。 可以给没有修改权限的系统类,添加方法和属性
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐