回答
如果你想提高可讀性而已,那麼你可以隨時分手if語句裏面的表達式:
$exp1 = is_array($var) && isset($var['key']);
$exp2 = is_object($var) && isset($var->key);
$exp3 = substr($string, 0, 4) == 'foo';
$exp4 = ($exp1 || $exp2) && $exp3;
if ($exp4) {}
,而不是
if (((is_array($var) && isset($var['key'])) || (is_object($var) && isset($var->key))) && substr($string, 0, 4) == 'foo') {}
顯然,這是簡化的例子,但你這個想法...
我見過很多表達式,跨越多行。這是提高可讀性的好方法! – 2010-05-11 22:41:17
那裏確實沒有魔術錘。讓他們易於管理的最好方法是將嵌套的ifs分解爲自己的函數,使其更具可讀性。
此外,請不要忘記array_filter。這可以讓你不必編寫for循環來過濾項目。
此外,您可以通過使用guard statements來消除嵌套。你基本上反過來,如果做一個return
而不是(將條件分解成函數的另一個原因)。
那麼if
是if
,那裏沒有其他的東西了。當然switch
是一種替代方案,但取決於它可能不適用的條件。
如果你正在做OOP,state design pattern可能是你所需要的。
否則,您必須提供更多的信息...
如果你不能在一個屏幕上閱讀折你的算法,有你需要重構你的代碼朝着更可讀性99.9%的機會。
變化
if ($isHappening) {
// ... millions of lines of code
} else {
// .. another million lines of code
}
到
if ($isHappening) {
happen();
} else {
didntHappen();
}
function happen() {
// millions of lines of code
}
function didntHappen() {
// another million lines of code
}
歡迎面向對象:)
class Case1 {
function do() { echo "case 1"; }
}
class Case2 {
function do() { echo "case 2"; }
}
$object = new Case1();
$object->do();
的世界,然後,有一個使用數組調度:
$choices = array("case1" => new Case1(), "case2" => new Case2(), ...);
$choices[ $_GET["case"] ]->do();
一個巧妙的訣竅,但可能與OO濫用有關。 – 2010-05-11 19:47:57
@xtofl所倡導的是多態的智能用法。顯然,這是一個過分簡化的情況,但是使用多態性來重構複雜的if語句是實體OO設計的一部分。 – 2010-05-11 19:57:07
我可以爲此擔保。經過OOP一段時間後,冗長,複雜的if語句對我來說是陌生的。現在一切都變得更短,更簡單。 – 2010-05-12 00:18:41
如果「大」,你的意思是大,高度嵌套的「ifs」,這是一個明顯的代碼氣味的跡象,你應該看OOP和設計模式。
- 1. 處理大量的if-else語句,轉
- 2. PHP IF語句中的IF IF語句
- 3. 如何處理多個if語句PHP
- 4. 批處理 - 在IF語句
- 5. if語句處理操縱
- 6. Incrontab不處理IF語句
- 7. 批處理腳本中的IF語句
- 8. if/else-if語句如何處理?
- 9. 在if語句中處理StringIndexOutOfBoundsException Java
- 10. 如何處理if-than語句中的大量條件?
- 11. Python的if語句錯誤處理
- 12. jQuery的if語句和事件處理
- 13. php if語句
- 14. PHP if語句?
- 15. if語句php?
- 16. php if語句
- 17. ASH if if語句中的if語句
- 18. If,else PHP中的語句
- 19. WordPress的:簡單的PHP IF語句不處理
- 20. IF語句批處理腳本
- 21. C預處理與if語句
- 22. 處理多個Javascript IF語句
- 23. 批處理文件「If」語句錯誤
- 24. If-else語句減少處理時間
- 25. 批處理文件if語句錯誤
- 26. 使用IF語句處理回車鍵
- 27. 使用If語句處理Bool值
- 28. if if ifif語句在PHP
- 29. 理解IF語句
- 30. 整理If語句
你的if語句有多大?有可能它們可以被簡化,並且取決於你正在處理的邏輯類型,可能有其他選擇。不過,如果你發佈了一些有洞察力的代碼。 – 2010-05-11 19:21:21
將其分解爲一個函數。 – kennytm 2010-05-11 19:21:52
不完全確定你的意思。就像紅寶石的'除非'? – 2010-05-11 19:22:16