实现简洁的if else语句
使用if else,有时间看起来会比较复杂,但这个可以通过在小块中进行编写代码来解决, 条件语句的使用增加了代码的可阅读性. 然而优先处理错误的情况是一条最佳实践 ,可以简化if else的逻辑,下面基于一个例子进行讲述.
例子 - 数据库的更新:
updateCache() - 它是一个基于类级别的变量来决策更新主数据库的方法.
updateBackupDb() - 一个更新数据的方法.
使用这种写法的if else语句很难拓展和调试已有的功能.
优化前:
// A simple method handling the data// base operation related taskprivatevoidupdateDb(boolean isForceUpdate){// isUpdateReady is class level// variableif(isUpdateReady){// isForceUpdate is argument variable// and based on this inner blocks is// executedif(isForceUpdate){// isSynchCompleted is also class// level variable, based on its// true/false updateDbMain is called// here updateBackupDb is called// in both the casesif(isSynchCompleted){updateDbMain(true);updateBackupDb(true);}else{updateDbMain(false);updateBackupDb(true);}}else{// execute this if isUpdateReady is// false i. e., this is dependent on// if conditionupdateCache(!isCacheEnabled);// end of second isForceUpdate block}// end of first if block}// end of method}
在上述的代码中,通过一个bool类型的变量通过if else和return语句将代码切为小块. 但上述代码主要实现的是
:
- 如果数据更新是没有ready的情况下,是不需要进入这个方法的,直接退出这个方法
- 类似地,当isForceUpdate 为false的情况下,那么执行else语句中的updateCache,然后return.
- 在最后一个一步中,当执行完其它的所有任务后,更新backup db和main db.
优化后:
// A simple method handling the// data base operation related// taskprivatevoidupdateDb(boolean isForceUpdate){// If isUpdateReaday boolean is not// true then return from this method,// nothing was done in else blockif(!isUpdateReady)return;// Now if isForceUpdate boolean is// not true then only updating the// cache otherwise this block was// not calledif(!isForceUpdate){updateCache(!isCacheEnabled);return;}// After all above condition is not// full filled below code is executed// this backup method was called two// times thus calling only single timeupdateBackupDb(true);// main db is updated based on sync// completed methodupdateDbMain(isSynchCompleted ?true:false);}
上述的代码主要是基于条件语句来考虑if else语句的优化, 这种类型的简单代码对于后续的开发者会比较容易的进行调试、理解、和功能扩展.
总结
优先处理错误的情况是一条最佳实践
参考链接:
writing-clean-else-statements
版权归原作者 赖small强 所有, 如有侵权,请联系我们删除。