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)