題記:
在kotlin中,調用函數時,如果參數為函數并且是最后一個參數,可以將參數移到括號外面。移動到括號外面之后如果括號內沒有參數,括號可以省略不寫。
View.OnClickListener的變身
Kotlin對Lambda的完美支持,讓我們寫單函數時有了極速的提升。
在Java中,對View添加一個點擊事件時是這樣寫的:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.VISIBLE);
...
}
});
而在Kotlin中我們使用它時,可以這樣:
view.setOnClickListener(object :View.OnClickListener{
override fun onClick(v: View?) {
v.visibility = View.VISIBLE
...
}
})
等等,這代碼量看起來好像跟Java也差不多吧,除了少了個;
別急,別急。這才是開始。根據lambda表達式規則:
? Lambda表達一般使用“{ }”包圍。
? 它的參數(如果有的話)在“->”前定義,參數類型可能是省略的。
? 函數體跟在“->”后面。
我們可把上面的代碼簡化為:
view.setOnClickListener({ v ->
v.visibility = View.VISIBLE
...
})
根據如果參數為函數并且是最后一個參數,可以將參數移到括號外面。
view.setOnClickListener() { v ->
v.visibility = View.VISIBLE
...
}
根據移動到括號外面之后如果括號內沒有參數,括號可以省略不寫。你見到的是這個。
view.setOnClickListener { v ->
v.visibility = View.VISIBLE
...
}
根據若函數參數對應的函數只有一個參數,在使用時,可以省略參數定義,直接使用“it”代替參數,你最終看到的是這個。
view.setOnClickListener {
it.visibility = View.VISIBLE
}
簡單吧。