简约的编码准则:
本文提出了一套语言无关的编码指引。使用这些准则产生的代码将是以上不使用这些准则的情况下编写的代码的维护。本文介绍了一套语言无关的编码指引。我毫不怀疑,一些开发商将采取与一个或多个这些准则的问题。但是,每个人都有一个理由,可能有助于减轻焦虑。但是,如果通过在TOTO,我向你保证,产生的代码将是更比不使用这些准则编写的代码维护。介绍
我知道。我知道。大多数程序员查看编码标准和准则作为入侵后,他们的创意和艺术才华。但考虑了一会儿,最有可能这些程序员正在开发工作作为租用别人的软件(例如,一个公司,一个客户端等)。如果是这样的情况下,所开发的软件是不是程序员可以版权,在这个意义上的艺术作品。此外,程序员并不拥有软件。最后,程序员是在压力下(又名快节奏的环境放在)可维护性其中的想法,通常是永远不会来临的另一天一边。作者的背景和视角
我相信大多数程序员尝试生产维护的代码。但是,如果他们不使用的编码标准,他们通常在他们的企图失败。也许是因为今天的程序员进入不同的工作力量,比过去。最近,作为20世纪90年代后期,入门级程序员被分配到维护任务。很少被他们原来的软件开发或设计的责任。结果呢?程序员学会了从别人的错误 - 最重要的是如何不代码软件。在大多数情况下,这些维护程序员发誓他们绝不会做给别人,为别人做了他们。
未被开发的软件正在维护。软件维护,因为它包含一个错误。作为一个程序员的一部分未能正确地贯彻执行要求或失败,对建筑师或设计师正确地说出一个要求,我定义了一个错误。在程序员的说法,前者仅仅是一个quot; bugquot;后者则美其名曰quot; enhancement.quot;
所以什么编码标准做一个程序员呢?请注意,必须有一些回报,否则程序员实在没有理由花时间来遵守。回报是简单的可读性。和可读性,增加可维护性。无论你是否是原开发商或分配到修复或加强软件程序员,你必须明白的代码之前,你可以修改它。
多年前,作为一名研究生,我写了一个相当复杂的软件,融入高速铁路运输导轨组成的多个包裹的权利的方式。导轨的路径,以尽量减少横向加速度。这个问题,如下图所示,是购买的包裹,使直线导轨(虚线),它通常是不可能的。相反,我们必须采取购买的包裹,使1导轨连接的两端(实线)。
{S0的}
我很高兴与软件,它做了什么是应该做的。几年后,问题就来了,稍作修改使用这个软件可以解决。我重新打开软件,发现我的恐惧,这是无法使用。当时,我被编码的原始软件我有没有考虑为风格,尤其是样式,资助下列程序员(包括我在内)理解的解决方案。其结果是一个真正的不必要的quot;再造的wheel.quot,;
大约在同一时间,我发现我自己的编码风格,命名为一本书,都尊敬的计算机科学家沮丧,写一套,我跟着他们的指引,将允许我收回我刚才代码。对我来说,在这本书的最大的教训是:quot;编写的软件,如果你为别人写的 - 在6个月,你会是别人quot;!
是什么意思,写别人呢?我认为这意味着使用清晰的写作风格和一致的格式计划。这是什么这些准则都是。"指引"
如下编码的准则是,希望语言无关。具体的例子可以使用C或C#作为他们的榜样语言。但准则本身是不依赖于C或C#。鸣谢
我要感谢德里克M.琼斯{A}的贡献,其网站的网页位于{A2的}{A3的}
{A4纸}
这些网页提供这些准则的理由大部分的基础。首要目标
一致性是最重要的准则是在计算机程序的字迹清晰。如果原来的程序员混合风格,下面的维护程序员更容易分心,从修理。这就提出了维护成本。标识符的拼写
我不认为有任何异议,标识符应该是自我描述。出现重大分歧来当标识符的拼写是问题。骆驼的情况。帕斯卡的情况下。大写。小写。底线。匈牙利表示法。都是一个或另一个段的方法,提出上诉。但同时也出现一个以上的另一种方法的福音只是一些个人的喜好拥护和不能说明一些事实,但陈述的意见。我认为这是合理的方法不一致的问题。建立完整的英语词汇的标识符。限制使用的授权集的缩写。pronounceability是一个容易申请拼写开发者的母语中找到的字符序列的特点相匹配的程度衡量方法。如果可以选择,很容易发音的字符序列,优先考虑那些有困难的发音。单独的英语单词用下划线。这种形式的分离区分程序员定义的标识符通常代表说,,API的入口点从系统中定义的标识符。使用小写字母,变量标识符。用于枚举,结构,类,接口,委托,命名空间等标识称号的情况下(第一个字母大写)。枚举值的标识符和const变量标识符使用大写字母。使用大写字母缩写。理由英文书写空白分开的话。当一个标识符的拼写是由几个不同的子组件,子组件之间使用下划线字符是最接近读者的经验与散文(即,用空格分开)可近似。一些开发商利用每个子的首字母。这种用法创建的字符序列,不像那些已培训读者的视觉外观。出于这个原因,将需要额外的努力来处理它们。在某些情况下,使用一个或多个其他字符可能会增加理解构造含有标识符(或许是因为换行符,需要组织可见源)所需的努力。选择自足和有意义的标识符。理由有唤起语义关联的标识符的拼写读者的利益。然而,可靠地唤起所需的语义关联,在不同的读者是很难实现的。如果可以选择,一个标识符的拼写,在许多人,有关标识符表示优先拼法,唤起他们人少,或俗称唤起无关的标识符表示的语义关联的语义关联,唤起。区分他们的首字母标识符。理由英语单词的开始,是以上原因的其他部分。出现心理词汇来存储他们的起点和英语口语似乎从他们开始认识字的优化的话。这表明,它是更好的开始比结束标识符的拼写差异(例如,猫,蝙蝠,垫,鼠)(如猫,驾驶室,可以和CAD)。避免超载。理由在任何情况下,一个字,应该有一个单一的意义。例如,它并不需要知道A,B和C的含义(预处理后),理解A = B C。这项声明不一定是真正的计算机语言,支持超载。缩进(见下面的Visual Studio中,)使用一个一致的的压痕计划,提高边缘检测。理由视觉接收的大脑区域选择性地边的方向。在一个知觉组织的理论,边缘检测是首次出现人类视觉系统的输入信号上执行的操作。读取源代码从左至右,从上到下。这是常见的做法是先上线序列的第一个非空白字符开始在同一水平位置。这种用法已经发现,以减少所需的可视化处理的代码共享共同的东西线的努力,例如,语句缩进通常用来表示嵌套块。边缘检测似乎是没有明显的努力,人们可以执行的操作。一个边缘也可用于加快项目的搜索,如果它沿边缘发生。声明在以下两个序列,较少的努力,需要找到一个特定的标识符在声明的第二块。在第一个块,读者首先扫描令牌找到标识符被声明的顺序。在其他块,标识符的位置是显而易见的。
边缘检测也提高了阅读方法声明的理解。在下面的两个声明,事半功倍需要了解在第二个声明的声明。在第一,读者第一扫描标记序列,以找到一个标识符。在第二,标识符是显而易见的。{C}使用语句缩进一致的计划。
理由有两种常用的语句缩进计划。他们采取了以下几种形式:Block Declaration
1 private List < Color > known_colors;
private Panel [ ] panels = null;
private Sort_By sort_by = Sort_By.HSL;
private ToolTip tooltip = new ToolTip ( );
2 private List < Color > known_colors;
private Panel [ ] panels = null;
private Sort_By sort_by = Sort_By.HSL;
private ToolTip tooltip = new ToolTip ( );
这两种形式之一,必须选择要使用的缩进语句机构,。有没有首选缩进语句机构的。相反,开发商的喜好是决定因素。同样,单一的规则简直是一致的。白色空间(见下面的Visual Studio中,)仅使用空白的空格字符。理由} {A5的定义为空格符,水平制表符,垂直制表符,换字符的空格和建议,他们可能被用来分隔标记。使用任何这些字符,空格字符以外,可能会导致一致的缩进计划的损失。有一个使用水平制表符,在源代码中的历史原因 - 可旋转的海量存储量有限。这个理由不再存在。大多数计算机都连接到千兆,甚至四字节的海量存储设备。因此,不再需要的源代码,以节省磁盘空间。此外,使用空间,有一个显着的优势。用空格缩进创建一致的缩进计划,无论什么显示设备可能(例如,显示器,打印页面等)。例如说,标签定义每8个字符的位置(激光打印机的正常选项卡设置)。一个维护程序员的修改,但使用空格而不是制表符缩进。这是很可能是新的或修改过的行代码的其余部分将有一个不一致缩进。
另一个困难是用制表符显示设备如何解释它们。比方说,一个程序员设置的源代码编辑器标签四个字符的位置。编码为正常的收益。程序员打印设计审查的源代码的副本。大多数激光打印机定义标签每8个字符的位置。打印代码的结果是一个重要向右缩进,程序员面临着两种选择:打印在横向模式或格式化源代码的代码。既不是特别欢迎的任务。更糟的是,这个问题本来是可以避免的使用空格缩进。源代码行长度限制的源代码行70个字符。理由quot; standardquot信件大小的纸张措施8-1/2 x 11英寸和quot standardquot的页边距是1英寸边。推荐的最小字体大小是11分。当源代码打印,打印的页面通常呈现以Courier New。当满足这些规定,一个完整的印刷线的最大宽度为70新品速递人物。在监视器上,要求下面的程序员滚动到正确的阅读源代码行是需要一个网页的读者滚动到右侧的傲慢。我们不这样做,我们的网站访问者。为什么这样做资深程序员吗?打破行当一个源代码行必须打破,以满足前面的源代码线长度的方针,打破行后,下面的运营商和标点符号之一:{体C3}或后,表明该声明是不完整的关键字之一:{的C4}理由源正在阅读时,读者获得了宝贵的视觉线索,该行已被打破,如果这些运算符,标点符号,或关键字就行了最后一个令牌。令牌分离(见下面的Visual Studio中,)从一个空格字符的逗号分隔的以下标记。一个空间,其操作数分开的二元运算符。所有其他标记彼此分开,由一个空格字符。代码折叠避免折页代码。{A6的}(使用许可)我才知道,后来是代码折叠,鼓励我写的越来越大的方法,并没有打扰他们分解成更小的一口大小的方法。其结果是,我往往结束了quot;一次写入维护neverquot的大单片方法的方案。在现代的IDE,代码折叠已经开始重现。这是奇怪的,因为代码折叠最初解决的问题,因为一直在等,更整洁,少短暂的方式消灭 - 即面向对象的设计。如果你盯着你的程序,不能见树不见林,代码折叠是错误的答案。答案是更好地组织你的程序封装成不同类别,使用接口,小的方法,等等细节。关于代码折叠的另一件事是,你最终浪费了很多时间折叠方法,展开,这是不是真的让你在任何地方。感觉就像是你正在做的工作,因为你积极点击,但你实际上没有取得任何进展。这就像试图通过不断地打开和关闭柜门的柜子里的内容重新排列。Visual Studio中if ( x ) if ( x )
{ {
if ( y ) if ( y )
{ {
F ( ) ; F ( );
} }
else else
{ {
G ( ) ; G ( );
} }
} }
此前,在这些准则中,我提到这一段。 Visual Studio提供了满足这些准则的一些援助。可以自动在Microsoft Visual Studio IDE中的空白和缩进准则。工具→选项→文本编辑器下是无数的控制源代码的格式设置。我强烈建议程序员需要时间审查这些设置。的优势之一就是,如果你不喜欢给你的代码的格式,你可以简单的切割(按Ctrl-A,CTRL-X)和粘贴(CTRL-V)的代码。如果您的文本编辑器设置你想要什么,然后Visual Studio IDE中格式化的代码(这也可以完成从编辑→高级"菜单项),根据自己的喜好。结论
正如前面所说的,有没有quot;右wayquot格式化计算机程序,不管是什么福音说。唯一重要的规则是一致的。这条规则,如有违反,将导致代码不可读的。和难以理解的代码是不可维护的代码。
我已经几十年的计算机编程。正如我刚才指出,开发实用的指导方针是反对捍卫自己的机制。但是事情已经发生了许多倍,增加我的信心在这些准则。几年后,我离开了一个项目,在Ada写,我接到呼叫保持我曾写过的驱动程序的程序员。他承认我的编码签名,并呼吁说quot;感谢you.quot;虽然司机数百线长,他能够保持轻松的代码。历史08/04/2011 - 原创文章