val 和 var 的使用規則
如果說 var 代表了 varible(變量),那麼 val 可看成 value(值)的縮寫。但也有人覺得這樣並不直觀或準確,而是把 val 解釋成 varible+final,即通過 val 聲明的變量具有 Java 中的 final 關鍵字的效果,也就是引用不可變。
Kotlin系列之let、with、run、apply、also函數的使用
內聯擴展函數之let
object.let{
it.todo()//在函數體內使用it替代object對象去訪問其公有的屬性和方法
...
}
//另一種用途 判斷object爲null的操作
object?.let{//表示object不爲null的條件下,纔會去執行let函數體
it.todo()
}
** [內聯函數]之with**
適用於調用同一個類的多個方法時,可以省去類名重複,直接調用類的方法即可,經常用於Android中RecyclerView中onBinderViewHolder中,數據model的屬性映射到UI上
java
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
ArticleSnippet item = getItem(position);
if (item == null) {
return;
}
holder.tvNewsTitle.setText(StringUtils.trimToEmpty(item.titleEn));
holder.tvNewsSummary.setText(StringUtils.trimToEmpty(item.summary));
String gradeInfo = "難度:" + item.gradeInfo;
String wordCount = "單詞數:" + item.length;
String reviewNum = "讀後感:" + item.numReviews;
String extraInfo = gradeInfo + " | " + wordCount + " | " + reviewNum;
holder.tvExtraInfo.setText(extraInfo);
...
}
kotlin
override fun onBindViewHolder(holder: ViewHolder, position: Int){
val item = getItem(position)?: return
with(item){
holder.tvNewsTitle.text = StringUtils.trimToEmpty(titleEn)
holder.tvNewsSummary.text = StringUtils.trimToEmpty(summary)
holder.tvExtraInf.text = "難度:$gradeInfo | 單詞數:$length | 讀後感: $numReviews"
...
}
}
內聯擴展函數之apply
從結構上來看apply函數和run函數很像,唯一不同點就是它們各自返回的值不一樣,run函數是以閉包形式返回最後一行代碼的值,而apply函數的返回的是傳入對象的本身。