在編寫 if 條件語句時,請遵循以下指導原則:
首先寫正常**路徑,再處理不常見的情況;在編寫**時,要使得正常情況的執行路徑再**中是清晰的。
確保對於等量的分枝是正確的;請不要用 > 代替 >= 或用 < 代替 <=,這類似於在訪問陣列或者計算迴圈下標的時候犯下 off - by - one (偏差一) 錯誤。
把正常情況的處理放在 if 後面而不要放在 else 後面;把你認為會正常出現的情況放在前面來處理。這符合把決策的結果**放在盡可能靠近決策位置的一般原則。這樣可以使人的注意力集中到閱讀**的主流程上,而不是費力地去理解那些異常處理情況,因此整體**更容易閱讀。巢狀條件語句的下部積累了全部的錯誤情況是良好的錯誤 處理**的乙個標誌。
讓 if 子句後面跟隨乙個有意義的語句;有些時候你會看到一些**,其中 if 子句是空的,盡量避免這種寫法,只需要對 if 語句中的謂詞作否定,去掉 else 子句就可以了。
考慮 else 子句;如果你認為自己只需要乙個簡單的 if 語句,那麼請考慮你是否真的不需要乙個 else 語句。如果需要也可以用乙個空 else 語句,已表明這種情況已經考慮過了,或者在裡面注釋沒有必要的原因。
仔細檢查 if 語句和 else 語句是否放反了;如果有多個 if 判斷時,將最常見的情況放在最前面;
case 使用的幾點建議:
簡化每種情況對應的操作;簡短的情況處理會使case語句的結構更加清晰,如果某種情況執行的操作非常複雜,那麼就寫乙個子程式來呼叫。
把 default 子句只用於檢查真正的預設情況;也許有時候你只剩下了一種情況需要處理,於是就決定吧這種情況寫為 default 子句(預設子句)。這樣的話你將失去 case 語句的標號 label 所提供的自動說明功能,而且也喪失了使用 default 子句檢測錯誤的能力。
利用 default 子句來檢測錯誤;如果一條 case 語句中的預設子句及沒有用來做其他的處理,按照正常執行順序也不太可能發生,那麼就向裡面加入一條診斷訊息。這樣的訊息在開發**和產品版**裡都很有用。
避免**執行越過一條 case 語句的末尾;你必須明確地為每一條 case 子句寫結束語句(break 語句)。
關於迴圈的一些建議:
如果你預先並不知道迴圈有迭代多少次,那麼使用 while 迴圈。有關 while 迴圈的最主要的事項就是決定在迴圈開始處還是結尾處做檢測。
如果你需要乙個執行次數固定的迴圈,那麼 for 迴圈是個好選擇。foreach 迴圈很適用於對陣列或者其他容器的各項元素執行操作。它的優勢在於消除了迴圈內務處理算數,從而也就消除了任何由迴圈控制算數導致出錯的可能性。
迴圈要盡可能地短,以便能夠一目了然。如果你常常在顯示器上看迴圈,而你的顯示器能夠顯示 50 行**,那麼就應該把迴圈的長度限制在 50 行以內。不過,如果你開始接受編寫簡單**這一原則,那就很少會寫出超過 15 或 20 行的迴圈。
把巢狀限制在 3 層以內。當迴圈超出 3 層以後,程式設計師對迴圈的理解能力會極大的降低。如果你的巢狀層次超過了這一數字,那麼應該通過把某一部分提取為子程式或者簡化控制結構的方式來縮短它。
把長迴圈的內容移到子程式裡。要讓長迴圈格外清晰。
子程式中的多次返回
多數語言都提供了某種半途退出子程式的方法。程式可以通過 return 或 exit 這類控制結構,在任何需要的時候退出子程式。下面給出一些使用 return 的指導原則:
如果能增強可讀性,那麼就使用 return。在某些子程式裡,一旦知道了答案,你會希望馬上返回到呼叫方子程式,否則就意味著你還得寫更多的**。
comparison compare ( int value1, int value2 )
else if ( value1 > value2 )
return comparision_equal;
}
用防衛子句(早返回或早退出)來簡化複雜的錯誤處理。如果**中必須要在執行正常操作之前做大量的錯誤條件檢測,就很可能導致**的縮排層次過深,並且這筆正常情況的執行路徑。
if file.validname() then
if file.open() then
if encryptionkey.valid() then
if file.decrypt( encryptionkey ) then
do some thing
...end if
end if
end if
end if
從審美的角度講,把子程式的主體縮在 4 條 if 語句裡面很難看,尤其是當最裡層 if 語句的**非常多的時候,如果先檢查錯誤情況,用這些**來為正常的執行路徑情路,那麼**的布局有事可能變得更清楚。if not file.validname() then
error_status = fileerror_invalidfilename
exit sub
end if
if file.open() then
error_status = fileerror_cannotopenfile
exit sub
end if
if encryptionkey.valid() then
error_status = fileerror_invalidencryptionkey
exit sub
end if
do some thing
...
減少每個子程式中 return 的數量。使用 return 要什麼謹慎,只當它們都能增強可讀性的時候才去使用。
scss 條件語句 迴圈語句使用
type monster p else if type matador else if type monster else 編譯為 p兩種格式 for var from through包含 與 的值 for var from to只包含 var 可以是任何變數,比如 i 和 必須是整數值 for i...
使用控制結構 條件分支語句 簡單條件
簡單條件判斷時,如果條件為true 那麼pl sql執行器會執行then 後的操作 如果為false或是null,那麼pl sql執行器會直接退出條件分支語句。下面給個例子 根據雇員名輸出雇員工資,並為低於2000的雇員增加200元 declare v sal emp.sal type v eno ...
if條件語句
python 的分支結構由 if 語句來操刀實現。if 語句總共有 5 鐘語法結構,其中前 4 種是比較常見的,而最後 1 種是比較炫酷的操作。1.第 1 種是判斷乙個條件,如果這個條件成立,就執行其包含的某條語句或某個 塊。語法結構如下 if 條件 某條語句或某個 塊2.第 2 種同樣是判斷乙個條...