使用總結
無規側就規則、隨心所欲、不忘初心
- 都可以組合使用,實現鏈式調用(apply、also基本就是builder模式語法糖)
- 根據下一步的鏈式調用的輸入選擇當前的高價函數(熟悉各個方法的定義),即下一步還是需要原引用,就用apply、also,否則使用let、run
- 記得結合?,判空操作使用!!!
方法定義
函數名稱 | (捕獲)輸入 | 輸出 |
---|---|---|
apply | this | 原引用 |
run | this | 函數塊的返回值 |
also | it | 原引用 |
let | it | 函數塊的返回值 |
函數塊的返回值是指函數塊的最後一行代碼(表達式)或retrun指定的值
使用案例
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
// 注意lastWeeksDate的類型是字符串,這個是目標/初心
val lastWeeksDate: String = Calendar.getInstance().apply { // this:Calendar
add(Calendar.DAY_OF_YEAR, -7)
}.also { //it:Calendar
print("created calendar of type: ${it.calendarType}")
}.let { //it:Calendar
val format = SimpleDateFormat("dd/M/yyyy hh:mm:ss", Locale.US)
format.format(it.time) // 函數塊的最後一行表達式是個字符串
}
# 整個鏈式操作,前兩次如builder模式模式常規劃使用,最後一個鏈式調用是變化操作,原因是我們想得到一個字符對象,also的使用我的理解是分享重要的核心的邏輯操作,組織一些無關要緊的代碼邏輯,如這個示例的日誌輸出等,apply也是引用對象的分段操作,方式業務代碼的組織與閱讀