kotlin学习笔记

  • $
println("itemB:$itemB") 
//字符串模板 
var userInfo = "name:${user.name}, age:$age"

  • 表示对象可能为空
//在变量类型后面加上问号,代表该变量是可空变量  
var name: String? = "zhangsan" 
/**
 * 如果str不能转为Int类型,则返回null
 */
fun parseInt(str: String): Int? { 
  // (代码略)
}
b?.length //如果 b非空,就返回 b.length ,否则返回 null,这个表达式的类型是 Int? 。
  • ?:
//如果r非空,我使用它;否则使⽤某个非空的值 x ”:
 val l = b?.length ?: -1 
  • !!
//返回一个非空的 b 值 或者如果 b 为空,就会抛出一个 NPE 异常
val l = b!!.length
  • ==,===

==判断值是否相等,===判断值及引用是否完全相等。

  • ..
    Kotlin中有区间的概念,区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。 区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。
if (i in 1..10) { // 等同于 1 <= i && i <= 10
    println(i)
}
  • _
data class Book(var id: Int, var name: String)
val book = Book(1, "英语")
val (id, _) = book
  • ::
    获取类的属性,方法
  • @
//1、限定this的类型
class User {
    inner class State{
        fun getUser(): User{
            //返回User
            return this@User
        }
        fun getState(): State{
            //返回State
            return this@State
        }
    }
}
//2、作为标签
loop@ for (itemA in arraysA) {
     var i : Int = 0
      for (itemB in arraysB) {
         i++
         if (itemB > 2) {
             break@loop
         }
         println("itemB:$itemB")
     }
}
  • 2018.11.21更新(平时编码注意点)

(1)优先使用不可变(而不是可变)数据。初始化后未修改的局部变量与属性,总是将其声明为 val 而不是 var 。总是使用不可变集合接口( Collection , List , Set , Map )来声明无需改变的集合。使用工厂函数创建集合实例时,尽可能选用返回不可变集合类型的函数:

// 不良:使用可变集合类型作为无需改变的值
fun validateValue(actualValue: String, allowedValues: HashSet) { ...... }
// 良好:使用不可变集合类型
fun validateValue(actualValue: String, allowedValues: Set) { ...... }
// 不良:arrayListOf() 返回 ArrayList,这是一个可变集合类型
val allowedValues = arrayListOf("a", "b", "c")
// 良好:listOf() 返回 List
val allowedValues = listOf("a", "b", "c")

(2)使用 until 函数在一个区间上循环:

for (1 in 0 until n){......}

(3)拓展函数also with let run apply的区别
参考 (https://blog.csdn.net/ljd2038/article/details/79576091)

参考文献:
https://blog.csdn.net/zxc123e/article/details/73368781

你可能感兴趣的:(kotlin学习笔记)