- $
println("itemB:$itemB")
//字符串模板
var userInfo = "name:${user.name}, age:$age"
- ?
表示對象可能為空
//在變量類型后面加上問號,代表該變量是可空變量
var name: String? = "zhangsan"
/**
* 如果str不能轉(zhuǎn)為Int類型,則返回null
*/
fun parseInt(str: String): Int? {
// (代碼略)
}
b?.length //如果 b非空迎捺,就返回 b.length ,否則返回 null查排,這個表達(dá)式的類型是 Int? 凳枝。
- ?:
//如果r非空,我使用它跋核;否則使?某個非空的值 x ”:
val l = b?.length ?: -1
- !!
//返回一個非空的 b 值 或者如果 b 為空岖瑰,就會拋出一個 NPE 異常
val l = b!!.length
- ==,===
==判斷值是否相等砂代,===判斷值及引用是否完全相等蹋订。
- ..
Kotlin中有區(qū)間的概念,區(qū)間表達(dá)式由具有操作符形式 .. 的 rangeTo 函數(shù)輔以 in 和 !in 形成刻伊。 區(qū)間是為任何可比較類型定義的露戒,但對于整型原生類型椒功,它有一個優(yōu)化的實現(xiàn)。
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、作為標(biāo)簽
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)優(yōu)先使用不可變(而不是可變)數(shù)據(jù)撩鹿。初始化后未修改的局部變量與屬性谦炬,總是將其聲明為 val 而不是 var 悦屏〗诼伲總是使用不可變集合接口( Collection , List , Set , Map )來聲明無需改變的集合。使用工廠函數(shù)創(chuàng)建集合實例時础爬,盡可能選用返回不可變集合類型的函數(shù):
// 不良:使用可變集合類型作為無需改變的值
fun validateValue(actualValue: String, allowedValues: HashSet<String>) { ...... }
// 良好:使用不可變集合類型
fun validateValue(actualValue: String, allowedValues: Set<String>) { ...... }
// 不良:arrayListOf() 返回 ArrayList<T>甫贯,這是一個可變集合類型
val allowedValues = arrayListOf("a", "b", "c")
// 良好:listOf() 返回 List<T>
val allowedValues = listOf("a", "b", "c")
(2)使用 until 函數(shù)在一個區(qū)間上循環(huán):
for (1 in 0 until n){......}
(3)拓展函數(shù)also with let run apply的區(qū)別
參考 (https://blog.csdn.net/ljd2038/article/details/79576091)
參考文獻(xiàn):
https://blog.csdn.net/zxc123e/article/details/73368781