程式碼優雅寫法之逆向邏輯
阿新 • • 發佈:2019-12-31
扯淡
好的程式碼 更多的也是為了後期維護,哪怕後期不需要你來維護 ,清晰乾爽的程式碼也會為作者留下好的印象
並且 在工作團隊中 可以施加影響力
用逆向邏輯 消滅巢狀
業務場景
乘坐飛機時需要 時間在起飛之前 先 領取登機牌 在 安檢 最後 天氣事宜飛行 的情況下 才能乘坐飛機起飛
時間在起飛時間後----> 改簽
未領取登機牌 ----->在飛機起飛前 領取登機牌
未安檢 ---->在 飛機起飛前 安檢
天氣事宜飛行 ---> 飛行
天氣不宜飛行 ---> 改簽
程式碼實現 之 瀑布流
if(currentTime() < airplane.startTime() ){
//時間在有效範圍內
if(boardingPass(user)){
//擁有登機牌
if(securityCheck(user)){
//安檢完成
if(haveAGoodDay()){
return //起飛
}else{
return //改簽
}
}else {
return //進行安檢
}
}else{
return //領取登機牌
}
}else{
return //改簽
}
看見這樣的程式碼 不知道是否有興趣在讀下去
這樣的程式碼給人一種邏輯不清晰的感覺 雖然邏輯上確實沒問題
複製程式碼
程式碼優雅寫法之封裝
將業務資訊封裝下,邏輯不混亂
程式碼實現之逆向邏輯
if(currentTime() > airplane.startTime()){
return //改簽
}
if(!haveAGoodDay()){
return //改簽
}
if(!boardingPass(user)){
return //領取登機牌
}
if(!securityCheck(user)){
return //安檢
}
return //起飛
用逆向思維消滅層層巢狀
程式碼中出現多次巢狀時:
1. 邏輯不清晰
2. 邏輯清晰但未將其視為一個業務整體,按照思維棧的思考編碼
3. 多層巢狀容易出現問題
複製程式碼
總結
多重或與並非的條件下達成的目的業務 不妨嘗試下逆向邏輯
時刻警惕思維棧編碼邏輯,優先將其考慮為一個整體
多重巢狀是有問題的程式碼