HardBirch

编写超级可读代码的15个最佳实践

时间:11-04-05 栏目:HTML5移动开发 作者:张飞不张,文采横飞 评论:115 点击: 55,186 次

译自:http://net.tutsplus.com/tutorials/html-css-techniques/top-15-best-practices-for-writing-super-readable-code/

译者:蒋宇捷(转载请标明出处-http://blog.csdn.net/hfahe)

 

 

       一月两次,我们重温Nettuts历史上读者最喜欢的文章。

       代码可读性是一个计算机编程世界的普遍主题。它是我们作为开发者第一件学习的事情。这篇文章将阐述编写可读性代码十五个最重要的最佳实践。


1 –
注释和文档

       集成开发环境IDE在过去的短短几年里走过了很长的路。它使得注释代码比以前更加有用。依照特定标准书写的注释允许IDE和其他工具通过不同的方式来使用它们。

       考虑如下示例:


       我在函数定义中添加的注释可以在调用它的地方看到,即便是在其他文件中。

       这里是我另外一个从第三方库中调用函数的例子:


       在这些特殊的例子中,使用的注释(或者文档)类型基于PHPDocIDEAptana


2 –
一致的排版

       我假定你已经知道了你必须要缩进你的代码。然而,保持排版样式一致仍然是一个好主意。

       这里有不止一种方式来进行代码排版。

第一种:

 

第二种:

 

第三种:

 

       我曾经使用第二种样式但是最近换为第一种。但是这仅仅只代表了一种偏爱。这里并没有每个人必须要遵守的“最好的”样式。事实上,最佳的样式,就是一致的样式。如果你是一个小组的一部分或者你在为一个项目贡献代码,你必须依照这个项目之前使用的样式。

       排版的样式总不是完全和另外一个不同。有时,它们混合了多种不同的规则。例如,按照PEAR编码标准,前括弧“{”和控制结构在同一行上,但是在功能定义后放在第二行上。

PEAR样式:

 

       同时注意它们使用4个空格而不是Tab来缩进。

       这里有一个维基百科的文章,里面有许多不同排版样式的例子。


3 –
避免显而易见的注释

       为代码添加注释是效果显著的;但是,它可能太过或者只是多余的文本。像如下例子:

  

       如果注释内容都是显而易见的,它们并没有提高工作效率。如果你必须要注释这些代码,你可以简单的把它们合并在一行:

 


4 –
代码分组

       确定的任务多半需要多行代码。使用一些空白将这些任务的代码分隔为几段是一个好主意。

       这是一个简单的示例:

 

       在每一段之前添加注释也增强了视觉上的分隔。

      


5 –
命名的一致性

       PHP有些时候在遵守命名一致性方面有很大问题:

  • strops()str_split()
  • imagetypes()image_type_to_extension()

       首先,这些命名必须有单词的分界线。有两种流行的选择:

  • 骆驼命名法:除了第一个单词外,每个单词的第一个字符大写。
  • 下划线命名法: 单词间采用下划线,例如mysql_real_escape_string()

       像我之前提到的一样,采用不同的命名选择会创建和排版样式类似的情形。如果一个已有的项目遵照一个确定的习惯,你必须遵守它。同时,某些语言平台倾向于使用特定的命名规则。例如Java里,大多数代码使用骆驼命名法;在PHP里大多采用下划线命名法。

       它们也可以混用。一些开发者喜欢在程序函数和类名上使用下划线命名,但是在类方法名上使用骆驼命名。

 

       所以,没有明显的“最好的”样式,只需要保持一致。


6 –
DRY
原则

       DRY即不要重复你自己。也被称为DIE:重复是恶魔。

       这个原则规定:

      “在一个系统里每一个知识的片段必须有一个单一、明确、权威的表现。”

       大多数应用程序(或者通常的计算机)的目的是让重复的任务自动化。这个原则在所有的代码,即使Web程序中也应该保持。代码的相同片段不应该多次重复。

       例如,大多数Web程序由许多页面组成。这些页面很可能包含相同的元素。页头和页脚经常符合这个条件。复制和粘贴这些页头和页尾到每一个页面中不是一个好主意。这是Jeffrey Way解释如何在CodeIgniter里创建模版的链接

 


7 –
避免过深的嵌套

       太多层的嵌套会造成代码阅读和跟踪困难。

 

       为了可读性,通常需要修改代码来减少嵌套的层数。

 


8 –
减少行的长度

       我们的眼睛对于阅读高和窄的文本列更感觉舒适。这就是为什么报纸文章看起来像如下样子的原因:


       避免在一行上编写过长的代码是一个最佳实践。

 

       同时,如果任何人想要在例如Vim这样的终端窗口中阅读代码,限制每一行的长度在80个字符以内是一个好主意。


9 –
代码结构

       理论上,你可以将整个应用代码写在一个文件里。但是对于阅读和维护来说是一个噩梦。

       在我的第一个编程项目中,我知道创建“包含文件”的含义。但是,我并没有好好进行组织。我创建了一个“inc”文件夹,放置了两个文件:db.phpfunctions.php。当程序变大时,functions文件也变得越来越大并难以维护。

       最好的方法之一是采用框架或者模仿它们的文件夹结构。下面是CodeIgniter的文件结构:



10
统一的临时变量名

       通常,变量名应该是描述性的并且包含一个或者更多的单词。但是,这对临时变量来说并不是必须的。它们可以短到只有一个单独字符。

       最佳实践是:对于有同样职责临时变量采用统一的命名。这里有一些我倾向于在代码里使用的例子:

 


11
– SQL
关键词大写

       数据库交互对于大多数Web应用来说是很大一个组成部分。如果你正在编写SQL查询,尽量保持它们可读。

       即使SQL关键词和函数名是大小写无关的,大写来将它们从表名和列名中区分出来是一个通用的实践。

 


12
代码和数据分离

       这是另外一个对于所有环境下的绝大多数编程语言都适用的原则。在Web开发中,数据通常意味着HTML输出。

       PHP许多年前第一次发布时,它最开始被看作是一个模版引擎。在巨大的HTML文件里插入一些PHP代码行是非常普通的。但是,这些年来,事情发生了改变:网站变得越来越动态化和功能化。代码已经是Web程序的一个很大的部分,将它们和HTML合并在一起并不是一个好的实践。

       你可以在你的程序中应用这个原则,或者你可以使用一个第三方工具(模版引擎、框架或者CMS系统)或者依照它们的习惯。

       流行的PHP框架:

       流行的模版引擎:

       流行的CMS系统:

  • Joomla
  • Drupal


13
模版内的交替格式

       你可以选择不使用一个奇特的模版引擎,取而代之的是在模版文件里使用纯内联的PHP代码。这不是必须要违反“数据和代码分离“,只是内联代码是直接和输出相关的,并且可读。在这种情况下你可以考虑使用交替格式来控制结构。

       这是一个示例:

 

       这让你避免了许多大括号。同时代码看起来和HTML的结构和排版相似。


14
面向对象
vs
面向程序

       面向对象编程可以帮助你创建结构化代码。但是这不代表你完全排除程序化编程。事实上创建两者混合的风格是非常棒的。

       描述数据,通常是数据库里的数据,必须使用对象。

 

       程序化方法常用于可以独立执行的特定任务。

 


15
阅读开源代码

       开源项目是许多开发者一起构建的。这些项目必须保持高度的代码可读性,以便他们可以尽可能高效的协同工作。

       因此,通读这些项目的源代码来观察这些开发者是如何工作的是非常棒的方法。



16
代码重构

       当你“重构“,你在不改变功能的情况下调整代码。你可以把它看作是“清理”,为了改进代码质量和可读性。

       这并不包括bug的修复或者添加新功能。你可以重构你之前编写的代码,当它们在你头脑你还保持新鲜的时候,以便于你两个月以后有可能回顾代码时更加可读和可重用。就像那句格言所说的一样:“尽早重构,经常重构“。

       你可以在重构期间应用以上任何关于代码可读性的“最佳实践“。我希望你喜欢这篇文章!我遗忘了什么?请通过回复告知我。

 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: 编写超级可读代码的15个最佳实践

编写超级可读代码的15个最佳实践:目前有115 条留言

  1. 0楼
    jankerli:

    [e03]

    2011-04-06 10:56 [回复]
  2. 0楼
    v_JULY_v:

    好。

    2011-04-07 11:45 [回复]
  3. 0楼
    v_JULY_v:

    原文写的非常好,译文简单却有效,赞Lz 一个。

    2011-04-07 11:49 [回复]
  4. 0楼
    xubogang:

    [e03][e03][e03][e03]

    2011-04-07 13:19 [回复]
  5. 0楼
    hfahe:

    回复 v_JULY_v:[e10]

    2011-04-07 13:29 [回复]
  6. 0楼
    lfsf802:

    [e01]

    2011-04-07 14:18 [回复]
  7. 0楼
    reesoft:

    [e01]

    2011-04-07 14:26 [回复]
  8. 0楼
    dwtsteven:

    [e01]

    2011-04-07 15:52 [回复]
  9. 0楼
    gouminghon:

    [e01]

    2011-04-07 16:17 [回复]
  10. 0楼
    lfsfxy9:

    [e01]

    2011-04-07 16:17 [回复]
  11. 0楼
    healer_kx:

    文章写得相当不错~

    2011-04-07 17:51 [回复]
  12. 0楼
    zhoukunta:

    顺便问下,楼主用的什么IDE和什么字体,感觉很q很清晰啊。

    2011-04-07 20:10 [回复]
  13. 0楼
    hfahe:

    回复 zhoukunta:IDE应该是Eclipse,字体我还真猜不到:)

    2011-04-07 21:39 [回复]
  14. 大赞一个,好文

    2011-04-08 08:32 [回复]
  15. 0楼
    wyf_wyf:

    很好!赞!

    2011-04-08 08:49 [回复]
  16. 0楼
    snakeaiyu:

    [e03]赞~ 一直想在项目中推行

    2011-04-08 09:12 [回复]
  17. 写的很好!赞一个。很多事情以前虽然知道,也变成了习惯,但是没有系统的总结一下。感谢LZ分享

    2011-04-08 12:31 [回复]
  18. 0楼
    Jocerly:

    不错,不过只要是标准的。那就要看自己的爱好咯。

    2011-04-08 12:41 [回复]
  19. [e01]

    2011-04-08 13:51 [回复]
  20. [e01][e04]

    2011-04-08 13:52 [回复]
  21. 0楼
    azx127:

    支持,非常给力,这些都是每个程序员需要掌握的

    2011-04-08 15:11 [回复]
  22. 这个是啥IDE,嘿嘿,别的先不管,字体真的很赞。[e03]
    另外,实在无法理解用空格而不是用tab缩进![e08]

    2011-04-08 15:57 [回复]
  23. 0楼
    hjfyyy:

    好吧。各种语言都有它的Programming Guideline的。关键是一致就好。

    2011-04-08 17:03 [回复]
  24. 0楼
    xiequ0704:

    [e01]

    2011-04-08 18:31 [回复]
  25. 0楼
    Sicnu2005:

    [e01]

    2011-04-08 21:53 [回复]
  26. [e01]

    2011-04-08 23:41 [回复]
  27. 0楼
    my_futurer:

    总结的很好

    2011-04-09 07:52 [回复]
  28. 0楼
    ShaChenNv:

    [e01]

    2011-04-09 09:59 [回复]
  29. 0楼
    syrchina:

    [e03]

    2011-04-09 12:20 [回复]
  30. [e01] 呵呵呵!

    2011-04-09 13:41 [回复]
  31. [e01]

    2011-04-09 13:41 [回复]
  32. 0楼
    taizans:

    [e10][e04]

    2011-04-09 18:43 [回复]
  33. 0楼
    chasemars:

    [e01]

    2011-04-09 20:37 [回复]
  34. 0楼
    ruolane:

    请问截图中用的什么字体[e03]

    2011-04-09 21:07 [回复]
  35. 写得很好,但是举得例子都是php的 感觉有点陌生 呵呵

    2011-04-09 21:15 [回复]
  36. 0楼
    A6248468:

    [e01]学习了

    2011-04-10 09:52 [回复]
  37. 谢谢LZ分享心得,好贴!Java有哪些好的开源项目!!麻烦高人荐几个??

    2011-04-10 10:27 [回复]
  38. 0楼
    H_Hoo:

    [e01]

    2011-04-10 10:59 [回复]
  39. [e01]

    2011-04-10 19:53 [回复]
  40. 0楼
    dayudodo:

    学习中[e01],养成好的习惯受用一生

    2011-04-10 20:10 [回复]
  41. 请问楼主 你IDE的字体是什么啊?
    谢谢啊

    2011-04-10 20:52 [回复]
  42. [e01][e01]

    2011-04-10 21:33 [回复]
  43. [e01][e03]很佩服

    2011-04-11 07:26 [回复]
  44. [e03]现实中确实深受代码不排版给调试带来的危害,初学都会犯“懒”的毛病,看来我应该尝试吸收这方面的知识并加以应用了

    2011-04-11 07:45 [回复]
  45. 0楼
    cztjing:

    [e01]

    2011-04-11 09:42 [回复]
  46. 0楼
    zippotwo:

    现实中确实深受代码不排版给调试带来的危害,初学都会犯“懒”的毛病,看来我应该尝试吸收这方面的知识并加以应用了

    2011-04-11 10:00 [回复]
  47. [e01]开发中,有时候过段时间回头看自己的代码还看不懂,重构很重要,还有除掉那写已经注释不用的,无关精要的注释代码

    2011-04-11 10:00 [回复]
  48. 0楼
    zclmoon:

    好文章啊。。[e01]

    2011-04-11 10:05 [回复]
  49. 一致的排版,书上一般都是第一种方法,因为节省纸。还是第二种阅读的比较爽,改回来吧。

    2011-04-11 11:09 [回复]
  50. 0楼
    hxembed:

    [e01]

    2011-04-11 12:57 [回复]
  51. [e01]

    2011-04-11 16:49 [回复]
  52. 0楼
    minghuiw:

    [e01]

    2011-04-11 18:32 [回复]
  53. 0楼
    xuwz71:

    超级赞
    好东东呀
    受教了

    2011-04-11 20:33 [回复]
  54. http://www.wtp365.com 龙之谷外挂

    2011-04-11 21:29 [回复]
  55. 0楼
    BEIDOUJS:

    赞一个。

    2011-04-12 07:27 [回复]
  56. [e01]

    2011-04-12 13:21 [回复]
  57. 0楼
    KO_KING:

    [e01]“`习惯很重要,不能因自己的一时懒惰给自己留下后患啊

    2011-04-12 13:27 [回复]
  58. 0楼
    bee0060:

    [e01]

    2011-04-12 15:14 [回复]
  59. 0楼
    davidhuxj:

    [e01]好习惯

    2011-04-13 00:02 [回复]
  60. 0楼
    aotian16:

    [e01]

    2011-04-13 10:43 [回复]
  61. 0楼
    hollies:

    [e01][e03]

    2011-04-13 11:10 [回复]
  62. 0楼
    wminxue:

    [e01]

    2011-04-13 12:29 [回复]
  63. 0楼
    LGYXDN:

    真棒,专业级的!

    2011-04-13 12:38 [回复]
  64. 0楼
    jacken2008:

    [e01]

    2011-04-13 13:35 [回复]
  65. 0楼
    jacken2008:

    [e01][e01]

    2011-04-13 13:35 [回复]
  66. 0楼
    hnliji1107:

    [e03]

    2011-04-13 14:30 [回复]
  67. [e01]很好很强大

    2011-04-13 15:06 [回复]
  68. 0楼
    cdjlovehyt:

    必须得支持一下~哈哈

    2011-04-13 15:53 [回复]
  69. [e01]

    2011-04-13 18:30 [回复]
  70. 0楼
    lanqiwudi7:

    很好,小细节,大问题。

    2011-04-13 21:35 [回复]
  71. 0楼
    twiker:

    写得非常好,顺便说一下楼主图片里的那个是什么字体啊,蛮好看的

    2011-04-13 21:48 [回复]
  72. [e03]

    2011-04-13 22:29 [回复]
  73. 0楼
    panzhiyang:

    总结的不错,赞一个[e03]

    2011-04-14 08:10 [回复]
  74. [e01]

    2011-04-14 09:23 [回复]
  75. 0楼
    ppmht:

    [e01]

    2011-04-14 09:46 [回复]
  76. 总结的不错,赞一个

    2011-04-14 10:19 [回复]
  77. 总结的不错.
    一个小建议:"面向程序"应该改成"面向过程".

    2011-04-14 10:59 [回复]
  78. 0楼
    lyglary:

    有些地方值得借鉴

    2011-04-14 11:10 [回复]
  79. 0楼
    huazifly:

    t1111est11111111,1234321

    2011-04-14 11:12 [回复]
  80. 0楼
    gjn86:

    [e01]不错

    2011-04-14 11:17 [回复]
  81. 0楼
    huazifly:

    t1111est11111111,1234321

    2011-04-14 11:24 [回复]
  82. 0楼
    dengyouhua:

    不错,很适合中国程序开发人员!

    2011-04-14 13:48 [回复]
  83. 0楼
    softroad:

    回复 IoriYagami80:不同系统上tab的长度不同可能为4个空格,或为8个空格,但是空格是一致的。

    2011-04-14 13:57 [回复]
  84. 0楼
    xx_mm:

    楼上几个人问字体:Consolas 一种适合编程人员的字体

    2011-04-14 14:34 [回复]
  85. 0楼
    rapax:

    [e01]

    2011-04-14 16:31 [回复]
  86. 0楼
    yasz1:

    规范真的很重要 深有体会

    2011-04-14 17:02 [回复]
  87. 0楼
    baiseshamo:

    讲得不错,收藏了

    2011-04-14 19:40 [回复]
  88. 0楼
    hfahe:

    回复 deping_chen:多谢:)

    2011-04-14 20:02 [回复]
  89. 0楼
    gisupc:

    [e01]

    2011-04-14 20:53 [回复]
  90. 0楼
    Yingmg:

    回复 zhoukunta:用的字体是Consolas,这个字体非常漂亮,比Courier New漂亮多了,而且很容易区分0和o,我的vc6和wxdev C++中用的都是这种字体,vs2010用的是Courier New

    2011-04-14 22:47 [回复]
  91. 0楼
    Synthesize:

    [e01]

    2011-04-15 09:15 [回复]
  92. 0楼
    jspancsdn:

    [e01][e03]好

    2011-04-15 10:29 [回复]
  93. 0楼
    hx35215:

    [e01]只为了漂亮的代码

    2011-04-15 11:20 [回复]
  94. 0楼
    wulong710:

    记号

    2011-04-15 14:13 [回复]
  95. 0楼
    gcangle:

    厉害 牛文啊
    对于我这样的菜鸟来说 相当有用的说

    2011-04-15 14:52 [回复]
  96. 0楼
    zl8522115:

    写的不错,但是看不到命名规则.
    PHP喜欢在函数中加上"_",但是大部分人却喜欢java的命名方式.
    在设计PHP程序的时候,考虑的问题我认为不比JAVA少,毕竟PHP是一次性的,要注重性能,不能过多的初始化.要尽快进入业务逻辑,所以我在开发中单例经常出现,甚至是全局从开始初始化到结尾都是单例.

    2011-04-15 23:19 [回复]
  97. 最近我正头疼这个,谢谢楼主[e03]

    2011-04-16 10:07 [回复]
  98. 0楼
    xjmaming:

    对我很有启发性。感谢。

    2011-04-16 13:28 [回复]
  99. 0楼
    zmoyun1031:

    牛[e03][e03][e03][e03][e03]

    2011-04-16 22:51 [回复]
  100. 回复 softroad:目前来说,很少有不支持设定tab长度的编辑器吧。而且,如果采用空格缩进,四个空格,缩进四层就是16个空格,如果输入15个空格则很难注意到,如此的代码反而更为不规矩了,而且如果是一段缩进比较多的代码可以通过修改编辑器的tab长度来让代码更好看![e03]

    2011-04-17 11:22 [回复]
  101. 0楼
    walldr:

    [e01] 代码优秀不单单是简单快捷的算法,代码的可读性也是很重要的

    2011-04-17 12:49 [回复]
  102. [e01][e01][e01]

    2011-04-17 17:04 [回复]
  103. 0楼
    lvron:

    [e01][e03][e04]

    2011-04-17 18:06 [回复]
  104. 0楼
    kapa24:

    用php做例子,呵呵

    2011-04-17 20:39 [回复]
  105. 0楼
    gzhxc:

    [e01][e01][e01]

    2011-04-17 21:05 [回复]
  106. 0楼
    shizuwu:

    [e01]

    2011-04-18 12:01 [回复]
  107. [e03]

    2011-04-18 12:17 [回复]
  108. 回复 hfahe:在这些特殊的例子中,使用的注释(或者文档)类型基于PHPDoc,IDE是Aptana。
    ——————————————————–
    自己翻译的都没发现?

    2011-04-18 14:10 [回复]
  109. 0楼
    myhope88:

    [e01]

    2011-04-20 13:46 [回复]
  110. [e01] 很不错的文章

    2011-04-21 09:07 [回复]
  111. 0楼
    hrxmomo:

    [e01]

    2011-05-05 23:56 [回复]
  112. 学习了

    2011-11-16 14:27 [回复]
  113. 0楼
    alswl:

    从哥学社过来,的确很棒的分享

    2011-11-16 15:35 [回复]
  114. 0楼
    bingorg:

    学习了非常好

    2012-01-12 19:43 [回复]
  115. 0楼
    GSO2011:

    程序书写规范,好的习惯很重要!

    2012-02-28 15:26 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐