iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
佛心分享-IT 人自學之術

30天轉職馬拉松:從0到Offer的學習計畫系列 第 21

程式語言基礎VII:什麼是作用域?

  • 分享至 

  • xImage
  •  


作用域是程式中定義變數的可見範圍,決定了在程式的哪些段落可以存取或修改特定的變數。掌握作用域的運作邏輯,對於撰寫清晰、高效且易於維護的程式碼非常重要。

作用域規則

層級概念

操場 > 教室

全域作用域(操場)

在這邊定義的變數我們稱作全域變數,可以被所有作用域存取。

相當於站在操場上的任何同學(全域變數),都可以被所有人呼叫。

局部作用域(教室)

在這邊定義的變數稱作局部變數,只能被局部作用域或更低階的作用域存取。

相當於坐在教室內的同學(局部變數),只能被教室內的同學或老師呼叫。

變數命名重複

由於著名的鮭魚之亂事件,現在每個班級都有個叫做 "鮭魚" 的同學,當老師在教室內呼喊「鮭魚」時,只會有該教室的「鮭魚」給予回應。

在不同作用域時可以有相同變數名稱,且彼此互不影響。

呼叫順序

如果老師在教室內呼喊「鮭魚」沒有人回應時,老師才會走到操場再次呼喊「鮭魚」。

程式在尋找變數時,會先從內層作用域開始,逐層向上。

作用域的影響

  1. 變數可見性:決定變數在程式中的可見範圍。
  2. 名稱衝突:不同作用域可使用相同的變數名而不會衝突。
  3. 記憶體管理:局部變數在不再需要時會被釋放,有助於有效管理記憶體。
  4. 程式可讀性:明確的作用域可以提升程式的可讀性,使其他開發者更容易理解程式碼。

實際應用案例

我們透過簡單的購物系統折扣計算來說明作用域在商務邏輯中的實際應用。假設我們正在開發一個簡單的購物車系統,需要根據客戶等級(VIP, 一般會員, 非會員)計算不同折扣:

# 全域變數
MEMBER_DISCOUNT = 0.9  # 加入會員享全站 10% 折扣

def calculate_discount(user_type, purchase_amount):
    # 局部變數
    vip_discount = 0.8  # 升級VIP獲得全站 20% 折扣
    
    if user_type == "VIP":
        # 使用局部變數 vip_discount
        discount = vip_discount
        
    elif user_type == "Member":
        # 使用全域變數 MEMBER_DISCOUNT
        discount = MEMBER_DISCOUNT
    else:
        discount = 1 # 非會員沒有折扣
    
    # 計算折扣後金額
    final_price = purchase_amount * discount
    
    return final_price

在這個例子中:

  • MEMBER_DISCOUNT 是全域變數,代表所有會員的基本折扣。
  • vip_discount 是局部變數,只在 calculate_discount() 函式內可見。
  • 函式根據用戶類型選擇適當的折扣,展示了如何在不同作用域中存取變數。
  • 最終計算的 discount, final_price 也是局部變數,僅在函式內有效。

這個簡單的例子展示了如何使用作用域來組織程式碼,使其更加清晰和易於管理。

結語

理解作用域的運作是寫出乾淨程式碼的關鍵。適當運用局部變數不僅能提高程式的可讀性和安全性,還能有效管理記憶體。在實際開發中,應盡量使用最小必要的作用域,這樣可以減少錯誤,提高程式碼的可維護性。


上一篇
程式語言基礎VI:你懂函式,函式就會幫你!
下一篇
演算法與資料結構I:什麼是時間複雜度?
系列文
30天轉職馬拉松:從0到Offer的學習計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言