在Swift程式中,每個「名稱」包括變數、常數、函式名稱等等,都有其個別的有效範圍,以範例1-5c為例,每個變數或常數的有效範圍如下圖:

說明如下:

注意我們在①最內圈變更了「數列」這個全域變數,因為它的有效範圍是涵蓋整個程式,所以即便離開迴圈、離開函式,被改變的結果仍是有效的,不會被還原。

在比較複雜的程式裡面,特別是多人共同做的專案中,這樣的用法並不好,因為你不知道全域變數會在哪裡被改過,很難追蹤和debug,也就是說,「全域變數」盡量少用。但「全域常數」則沒有這個顧慮。

除了變數或常數之外,任何命名的名稱都有類似的有效範圍,如果在內圈的命名與外圈重複,會取用較內圈的變數,如下例。

// 1-5f 變數有效範圍
// Created by Heman, 2021/07/19
let i = 10

for i in 1...9 {
    print(i)
}

print(i)

在for迴圈內 print(i) 取的是迴圈參數 i,所以印出1到9,而最後一行 print(i)取的是全域常數 i,印出10。

變數、常數等名稱的範圍(Scope)是程式設計很重要的概念,範圍不同,程式的邏輯會跟著不同。在不同範圍內,取相同變數名稱,容易導致邏輯錯誤,但有時又很難避免,只能靠正確的觀念,細心地去debug。

下一節:Debug 迴圈