varisDiskMounted=truefuncreateNewFile(file:File?):Boolean{returnif(isDiskMounted){if(file!=null){file.createNewFile()if(file.exists()){true}else{println("Create file($file) failed")false}}else{println("File($file) is null")false}}else{println("Disk is not mounted")false}}
上面的代碼實現了
檢測磁盤是否掛載
檢測file參數是否爲null
檢測執行操作結果是否成功(file.exists())
但是上面的代碼也有一些問題
太多的if else 檢測,層級產生,不夠平
多個方法出口
更不容易發現異常和錯誤(有點類似fail safe模式)
使用今天的知識點改造
12345678910111213141516
funcreateNewFileV2(file:File?):Boolean{check(isDiskMounted){"Disk is not mounted"}requireNotNull(file){"file is null"}file.createNewFile()assert(file.exists()){"createNewFileV2 file($file) does not exist"}returntrue}
funreadFileContent(file:File?):String{//判斷file不能爲nullrequireNotNull(file)//判斷文件必須可讀,並提供錯誤的信息require(file.canRead()){"readFileContent file($file) is not readable"}//read file contentreturn"Your file content"}
變種方法
fun require(value: Boolean)
fun require(value: Boolean, lazyMessage: () -> Any)
fun <T : Any> requireNotNull(value: T?)
fun <T : Any> requireNotNull(value: T?, lazyMessage: () -> Any)