程式碼行數越多可讀性越好?

banq發表於2024-05-17

人們很容易認為最小化程式碼行數對於提高程式碼可讀性很重要。
然而,減少行數並不總是最好的選擇。

在本文中,我們將解釋優先考慮可讀性而不用擔心程式碼行數的重要性。

程式碼簡潔但難以理解的問題
下面的程式碼是一個函式,用於確定給定字串是否是有效的電子郵件地址。

def is_valid_email(email):
    return re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email)

這段程式碼一行寫成,非常簡潔。
然而,理解正規表示式的含義並不容易。

當其他工程師閱讀這段程式碼時,他們很難立即理解用於確定電子郵件地址有效性的條件。
另外,如果正規表示式模式發生變化,修改這段程式碼將會很痛苦。

正規表示式模式很複雜,某一部分的變化會影響其他部分。

可讀性優先的程式碼示例
以下程式碼是上一個示例的更具可讀性的版本。

import re
 
def is_valid_email(email):
    if not email:
        return False
 
    parts = email.split('@')
    if len(parts) != 2:
        return False
 
    local_part, domain_part = parts
    if not local_part or not domain_part:
        return False
 
    if not re.match(r'^[a-zA-Z0-9._%+-]+$', local_part):
        return False
 
    domain_parts = domain_part.split('.')
    if len(domain_parts) < 2:
        return False
 
    for part in domain_parts:
        if not re.match(r'^[a-zA-Z0-9-]+$', part):
            return False
 
    return True

此程式碼確定電子郵件地址的有效性,如下所示:
  • 檢查電子郵件地址是否為空
  • 用"@"分割並分為兩部分:本地部分和域部分
  • 檢查本地和域部分是否為空
  • 確保本地部分只包含有效字元
  • 確保域部分用".分割成至少兩個部分。
  • 確保域部分的每個部分都只包含有效字元。

雖然程式碼行數增加了,但每個步驟都分得很清楚,也更容易理解。
正規表示式模式也得到了簡化,更易於修改。

總結
減少程式碼行數並不總是最佳選擇。
相反,重要的是優先考慮程式碼的可讀性,編寫其他工程師易於理解的程式碼。

一味追求簡潔會使程式碼更加難以理解。
透過適當的命名、註釋和邏輯分解,清楚地傳達程式碼的意圖。

編寫易於閱讀和維護的程式碼,即使需要更多行,從長遠來看也會提高程式碼質量。

 

相關文章