在程式設計的學習路上,流程控制是基本功中的基本功,而 if 和 switch 更是我們最常用的兩種判斷工具。然而,它們的用法與時機卻常常讓初學者感到困惑。
最近,有位網友在論壇上分享了他在訂單查詢系統中遇到的問題:他嘗試將 if 的多條件判斷寫法用在 switch 的 case 中,結果程式雖然沒有報錯,但執行結果卻完全不符合預期。
這篇文章將藉由這個實際案例,深入探討 if 和 switch 的核心差異,並教您如何正確地使用它們,以及如何利用偵錯工具找出問題所在。
網友遇到的問題 這位網友正在開發一個訂單查詢系統,他希望根據不同的查詢條件來更新訂單狀態。他嘗試使用 switch 來處理不同的情境,其中一段程式碼類似這樣:
switch (OrderStatus) {
case (listDate >= BeginDate && listDate <= EndDate):
break ;
case (OrderStatus != "" && OrderList.indexOf(OrderName) != -1 ):
break ;
}
他的預期是,當條件符合時,程式會執行對應 case 區塊的程式碼。但實際情況是,判斷結果總是不正確。這究竟是為什麼呢?
if 與 switch 的核心差異 要解開這個謎題,我們必須先理解 if 和 switch 在設計上的根本不同。
switch 的設計初衷非常單純:檢查一個 單一變數 是否等於數個 特定值 中的一個。
它的語法結構如下:
switch (變數) {
case '值A' :
break ;
case '值B' :
break ;
case '值C' :
case '值D' :
break ;
default :
break ;
}
重點:
switch 後面的括號 () 內只能放一個變數或表達式。
case 後面只能接一個 具體的值 (例如:數字 10 、字串 "已出貨" ),用來和 switch 的變數做嚴格相等 ( === ) 的比較。
它無法處理複雜的邏輯運算,如 && (AND)、 || (OR) 或範圍比較 ( > , < )。
if 則彈性得多,是處理複雜邏輯判斷的萬用工具。
它的語法結構如下:
if (條件A && 條件B) {
} else if (條件C || 條件D) {
} else {
}
重點:
可以在 () 內組合 多個變數 。
可以使用各種 比較運算子 ( == , != , > , < )。
可以使用 邏輯運算子 ( && , || ) 來建立複雜的判斷邏輯。
回到網友的問題:錯誤在哪裡? 了解了核心差異後,我們再回頭看網友的程式碼就一目了然了。
switch (OrderStatus) 這行程式碼已經明確告訴程式:「接下來我要比較的對象是 OrderStatus 這個變數。」
因此,後面的 case 只能寫成 case "已出貨": 或 case "處理中": 這樣的形式。網友的寫法 case (listDate >= BeginDate && listDate <= EndDate): 是將 if 的判斷邏輯錯用在 case 上,這是不合法的語法,自然無法得到正確的結果。
正確的解決方案:改用 if 判斷式 對於網友需要判斷「日期區間」或「訂單狀態與名稱同時成立」這類複雜情境,唯一正確的選擇就是使用 if...else if...else 。
if (listDate >= BeginDate && listDate <= EndDate) {
} else if (OrderStatus != "" && OrderList.indexOf(OrderName) != -1 ) {
} else {
}
這樣寫,程式碼的邏輯才會清晰且正確地被執行。
小技巧:善用偵錯工具 (Debugger) 理解程式流程 當你不確定程式為何不如預期時,Google Apps Script 內建的「偵錯工具」是你的好幫手。
設定中斷點 :在你想觀察的程式碼行號旁點擊一下,會出現一個藍點,這就是中斷點。
執行偵錯 :選擇要執行的函式後,點擊工具列上的「偵錯」按鈕(長得像一隻小昆蟲)。
觀察變數 :程式會執行到你設定的中斷點暫停。此時,你可以查看右側「偵錯工具」視窗中的「變數」區塊,清楚看到每個變數在當下的值。
步進執行 :點擊「步進」(Step over) 按鈕,讓程式一行一行地往下跑,觀察程式的走向是否跟你想的一樣。
透過偵錯,你可以輕易發現 switch 根本沒有進入你預期的 case ,從而快速定位問題。
總結 if 和 switch 都是不可或缺的工具,關鍵在於用對地方。
使用 :當你需要根據 一個變數 的 多種固定值 (例如:星期一、星期二...;狀態A、狀態B...)執行不同程式碼時,使用 switch 會讓程式碼更簡潔易讀。
使用 :當你需要處理 多個變數 、 範圍比較 或 複雜的邏輯組合 ( && / || ) 時, if 才是你最好的朋友。
希望透過這次的案例分析,能幫助大家更深刻地理解 if 與 switch 的差別,未來在撰寫程式時能更加得心應手!
VIDEO
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。