代码行数越多可读性越好?

人们很容易认为最小化代码行数对于提高代码可读性很重要。
然而,减少行数并不总是最好的选择。

在本文中,我们将解释优先考虑可读性而不用担心代码行数的重要性。

代码简洁但难以理解的问题
下面的代码是一个函数,用于确定给定字符串是否是有效的电子邮件地址。

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

此代码确定电子邮件地址的有效性,如下所示:
  • 检查电子邮件地址是否为空
  • 用"@"分割并分为两部分:本地部分和域部分
  • 检查本地和域部分是否为空
  • 确保本地部分只包含有效字符
  • 确保域部分用".分割成至少两个部分。
  • 确保域部分的每个部分都只包含有效字符。

虽然代码行数增加了,但每个步骤都分得很清楚,也更容易理解。
正则表达式模式也得到了简化,更易于修改。

总结
减少代码行数并不总是最佳选择。
相反,重要的是优先考虑代码的可读性,编写其他工程师易于理解的代码。

一味追求简洁会使代码更加难以理解。
通过适当的命名、注释和逻辑分解,清楚地传达代码的意图。

编写易于阅读和维护的代码,即使需要更多行,从长远来看也会提高代码质量。