为什么编码规范里要求每行代码不超过80个字符的限制是合理的

标签: 编码规范 编码风格 技术技巧 | 发表时间:2013-04-08 23:20 | 作者:Aqee
出处:http://www.aqee.net
编辑器

也许在 Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制。没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值。

古老的VT100终端

古老的VT100终端

现在很多软件公司采用的编码规范基本是 PEP8,但每行80个字符的限制除外。GitHub上的项目,大多数都遵循PEP8规范(这一点似乎达到了高度的统一),但遵守80个字符限制的很少。在一些有明确规定的规范标准中,这个限制可能会增加(100或120),甚至完全删除。这样做常长见的理由是:我们已经不是使用 VT100终端编程的年代了,我们有了更大,更高分辨率的屏幕。这是事实,但我发现,在Python编码中采用这个80个字符的规范,配合空格的使用, 这会让我们的代码更急凑,更可读。

有一点你可以看出,在自然情况下,Python语句的长度一般会占大概 35-60个字符(不包括缩进)。更长的语句很少见。如果突然有一个句子比其它的要长很多,会显得很突兀,不好看。同样,使用强制性的空格来增加行宽能够从视觉上帮助你优化减少嵌套循环的层数,一般的建议是重构代码不要让缩进多于4层。

例如,把下面这个:

def search(directory, file_pattern, path_match,
           follow_symlinks=True, output=True, colored=True):
    ''' Search the files matching the pattern. The files will be returned, and can be optionally printed '''

    pattern = re.compile(file_pattern)

    results = []

    for root, sub_folders, files in os.walk(directory, followlinks=follow_symlinks):
        # Ignore hidden directories
        if '/.' in root:
            continue

        # Search in files and subfolders
        for filename in files + sub_folders:
            full_filename = os.path.join(root, filename)
            to_match = full_filename if path_match else filename
            match = re.search(pattern, to_match)
            if match:
                # Split the match to be able to colorize it
                # prefix, matched_pattern, sufix
                smatch = [to_match[:match.start()], to_match[match.start(): match.end()], to_match[match.end():]]
                if not path_match:
                    # Add the fullpath to the prefix
                    smatch[0] = os.path.join(root, smatch[0])

                if output:
                    print_match(smatch, colored)

                results.append(full_filename)

    return results

和这个比较:

def search(directory, file_pattern, path_match,
           follow_symlinks=True, output=True, colored=True):
    ''' Search the files matching the pattern.
        The files will be returned, and can be optionally printed '''

    pattern = re.compile(file_pattern)

    results = []

    for root, sub_folders, files in os.walk(directory,
                                            followlinks=follow_symlinks):
        # Ignore hidden directories
        if '/.' in root:
            continue

        # Search in files and subfolders
        for filename in files + sub_folders:
            full_filename = os.path.join(root, filename)
            to_match = full_filename if path_match else filename
            match = re.search(pattern, to_match)
            if match:
                # Split the match to be able to colorize it
                # prefix, matched_pattern, sufix
                smatch = [to_match[:match.start()],
                          to_match[match.start(): match.end()],
                          to_match[match.end():]]
                if not path_match:
                    # Add the fullpath to the prefix
                    smatch[0] = os.path.join(root, smatch[0])

                if output:
                    print_match(smatch, colored)

                results.append(full_filename)

    return results

在第一段代码里会出现滚动条,但即使是没有出现滚动条,这代码表现的也不美观,视觉上不平衡。第二段代码看起来更好,更容易阅读。

另外重要的一点是,我可以在屏幕上显示更多的东西。很多时候我们都需要屏幕上同时看一个文件的多个地方,或多个文件的内容。我喜欢的实现这个目的的方法是让它们按列排列。如果整个文件有80个宽度的限制,代码会有一个很好的呈现,我不用担心代码在编辑器里会否自动折行,不用去麻烦配置编辑器。如果我需要使用vim在命令行里快速编辑一个文件,就不用担心文件的宽度。能专注于代码。

竖行排列显示

竖行排列显示

唯一有问题的是使用Django的时候。当使用Django框架,你需要使用很多像这样的调用:

ThisIsMyModel.objects.find(field1=value1, field2=value2).count()

在有缩进的代码里,一个‘最小’的model函数调用都会让你没有多少剩余空间…但我仍然坚持相同的原则,尽量让代码表现的清晰可读,但这比起其它Python代码来要难的多。

所以,即使这个限制最初的愿望已经和现在完全不符合,我仍然觉得这个限制能帮助我写出更可读紧凑的代码。我是一个要求“可读性”的狂热分子,我甚至认为 代码的可读性是一个最重要的需要考虑的方面,程序员应该在任何时候都铭记这一点。


本文由 外刊IT评论网( www.aqee.net)原创发表,文章地址: 为什么编码规范里要求每行代码不超过80个字符的限制是合理的,[英文原文: 80 chars per line is great ]







相关 [编码 规范 代码] 推荐:

java编码规范

- - ITeye博客
   总结前期做的几个项目,个人认为代码的规范对团队的协作有着密切的关系. 现将一些常用的约束总结如下,以便今后参阅:. 1、所有的类、属性、方法都遵守以字母和数字为主,尽量不要参与特殊符号如下划线. 其次,除类名开头字母大写外,其他名字都要小写,然后第二个后的单词首字母大写,长度在30个字符以内.

oracle 编码规范

- - 操作系统 - ITeye博客
军规一:【恰当控制事务大小,commit不要过于频繁. 】 军规二:【在OLTP系统中一定要注意使用绑定变量. 】 军规三:【在OLTP系统中一定要注意复杂的多表关联不宜超过4个,关联十分复杂时,需要拆分成多个步骤,防止执行计划不正确. 】 军规四:【合理收集统计信息,固定住SQL的执行计划. 】 军规五:【尽量避免使用XA事务,在RAC环境中要避免XA事务跨节点操作.

HTML编码规范

- - SegmentFault 最新的文章
这段时间在整理前端部分代码规范,初步想法是从HTML、CSS、Javascipt、项目文件目录四部分是整理. 之前已经整理完了 CSS编码规范,有兴趣可以了解下. [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符. 对于非 HTML 标签之间的缩进,比如 script 或 style 标签内容缩进,与 script 或 style 标签的缩进同级.

为什么编码规范里要求每行代码不超过80个字符的限制是合理的

- - 外刊IT评论
也许在 Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制. 没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值. 现在很多软件公司采用的编码规范基本是 PEP8,但每行80个字符的限制除外. GitHub上的项目,大多数都遵循PEP8规范(这一点似乎达到了高度的统一),但遵守80个字符限制的很少.

JavaScript之编码规范

- - CSDN博客推荐文章
   JavaScript是一种语法灵活,简单易懂的脚本语言. 正因为灵活,因此很多人在编写代码时,显得很随意,这就导致后期的修改、扩展和维护变得异常困难. 遵循统一的编码规范,不仅对C++和Java这种编译型语言很重要,对JavaScript脚本语言也同样如此.       1、应给变量和函数取一个含义确切的名称,不要随意命名.

Java/Android编码规范

- - CSDN博客推荐文章
1.        为什么需要编码规范?. 编码规范对于程序员而言尤为重要,有以下几个原因:. l        一个软件的生命周期中,80%的花费在于维护. l        几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护. l        编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码.

编码规范集锦

- - 外刊IT评论
真的不知道我的第一篇真正的文章应该以什么为主题. 简单说——编码规范是一种…规范. 通过建立起一种通用的约定和模式,所有人都遵循,以此帮助打造健壮的软件. 有很多好处,包括(不仅限于此):. 保持编码风格,注释风格一致,应用设计模式一致. 新程序员,通过熟悉你们的编码规范,可以更容易、更快速的掌握你们的程序基础库.

Object-C编码规范

- - 编程语言 - ITeye博客
▪ 如:NSString *varName;. ▪ 只允许使用空格,将编辑器设置为1个TAB = 2个字符缩进. ▪ 每行最多不得超过100个字符. ▪ 以15寸Macbook Pro的大小,每行100个字符时能最大化地同时容下编辑器和iPhone模拟器. ▪ Google的80字符的标准有点少,这导致过于频繁的换行(Objectve-C的代码一般都很长).

编码风格不是编码规范

- - 外刊IT评论
我并不认为程序员是一个情绪特别丰富的群体. 但有一些事情却能很容易刺激程序员的神经,那就是代码格式和布局. 如果看到一个函数的括弧在同一行上没有闭合,我的眼睛会喷血. 如果看到有人没有 恰好的在两个函数间留一空行,我的小腿会抽筋. 但重点在这里——除非是在家里开发自己的业余爱好软件,我的这些个人喜好其实是无关紧要的.