原始日期:

2017-02-06 16:20

《The Elements of Programming Style 》是一本很古老的书。尽管 Fortran 我们不太使用,尽管新奇的语言层出不穷,但这些,30 年的岁月依旧无法掩盖其中的真知灼见。英文版的 google一下到处有。
 
把代码写清楚,别耍小聪明。 
想干什么,讲的简单点、直接点。 
只要有可能,使用库函数。 
避免使用太多的临时变量。 
”效率“不是牺牲清晰性的理由。 
让机器去干那些脏活。 
重复的表达式应该换成函数调用。 
加上括号、避免歧义。 
不要使用含糊不清的变量名。 
把不必要的分支去掉。 
使用语言的好特性,不要使用那些糟糕的特性。 
该用逻辑表达式的时候,不要使用过多的条件分支。 
如果逻辑表达式不好理解,就试着做下变形。 
选择让程序更简洁的数据表达形式。 
先用伪代码写,再翻译成你使用的语言。 
模块化。使用过程和函数。 
只要你能保证程序的可读性,能不用 goto 就别用 。 
不要给糟糕的代码打补丁 - 重写就是了。 
把大的程序分成一小片一小片来写,分块测试。 
使用递归程序来处理递归定义的数据结构。 
正确和错误的输入数据都要测试。 
确保输入不会超出程序的限制。 
依靠文件结束来终止输入,而不是依赖一个记数。 
把文件结束作为一个输入状态来处理。 
识别出错误的输入;如果有可能就修复它。 
让输入数据很容易构造出来,让输出数据不言自明。 
使用统一的输入格式。 
让输入容易校对。 
如有可能,提供更自由的输入格式。 
使用输入提示,允许使用默认值。并把它们显示出来。 
把输入输出放到子程序里。 
确保所有的变量在使用前都有初始化。 
不要因为一个 bug 而停止不前。 
打开编译程序的调试选项。 
常量结构用数据声明初始化,变量结构用执行代码初始化。 
小心 off-by-one 错误。 
当循环中有多个跳出点时要小心。 
如果什么都不做,那么也要优雅的表现出这个意思。 
用边界值测试程序。 
手工检查一些答案。 
防御式编程 - 为不可能的情况写几句代码。 
10.0 乘 0.1 很难保证永远是 1.0 。 
7/8 等于 0 ,而 7.0/8.0 不等于 0 。 
不要直接判断两个浮点数相等。 
先做对,再弄快。 
先使其可靠,再让其更快。 
先把代码弄干净,再让它变快。 
别为了获得一丁点“性能”就牺牲掉整洁。 
让编译器做些简单的优化。 
不要过分追求重用代码;下次用的时候重新组织一下即可。 
确保特殊的情况是真的特殊。 
保持简洁以获得速度。 
不要死磕代码来加快速度 - 找个更好的算法。 
用工具分析你的程序。在做“性能”改进前先评测一下。 
确保注释和代码一致。 
不要在注释里仅仅重复代码 - 让每处注释都有价值。 
不要给糟糕的代码做注释 - 应该重写它。 
给变量都起个有意义的名字。 
把程序重新整理一下,让阅读代码的人更容易理解。 
为你的数据布局写一个文档。 
不要过分注释。

来源:http://blog.chinaunix.net/uid-21736802-id-1817764.html

【转载】The Elements of Programming Style之代码风格金科玉律的更多相关文章

  1. [转] 編程風格要素-The Elements of Programming Style 中文英文中英對照

    转自: http://www.loliman3000.com/tech/2fe33ce32906f0302412881.php 下面的程序風格規則提煉自Brian Kernighan和P. J. Pl ...

  2. THE ELEMENTS OF C# STYLE

    |前言 程序员其实艺术家,灵动的双手如行云流水般在键盘上创造着生命的奇迹,我认为代码是有灵魂的.同一个模块,在每个程序员手中所缔造出来的是不相同的. 最终,这个模块或者实现了最初的业务,但是回过头看看 ...

  3. [转] Matlab编程规范(MATLAB Programming Style Guidelines)

    转自: Jerry Zitao Liu的博客 主要是参考了下面这篇文章,简洁总结在这里. MATLAB Programming Style Guidelines 简洁总结如下: 表示object的数量 ...

  4. 转载--Typecho install.php 反序列化导致任意代码执行

    转载--Typecho install.php 反序列化导致任意代码执行 原文链接(http://p0sec.net/index.php/archives/114/) 0x00 前言 漏洞公布已经过去 ...

  5. C Programming Style 总结

    对材料C Programming Style for Engineering Computation的总结. 原文如下: C Programming Style for Engineering Com ...

  6. 代码风格JavaScript standard style与Airbnb style

    代码风格JavaScript  standard style与Airbnb style

  7. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  8. GO代码风格指南 Uber Go (转载)

    原文地址:https://github.com/uber-go/guide/blob/master/style.md 译文出处:https://github.com/uber-go/guide 本文永 ...

  9. Google coding Style Guide : Google 编码风格/代码风格 手册/指南

    1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...

随机推荐

  1. 关于BSTR和SysStringLen方法的简单研究

    英文的我编不下去了,所以还是先写个中文的吧, 之前遇到了SysStringLen求Bstr长度不正确的问题,试验了几次都不行的情况下我觉得可能是这个方法的bug,所以就没管. 大概的情况是这样: in ...

  2. 刚由pc端做移动端的感受

    最近新调到一个项目,由原来的pc端,调到移动端,一切都是那么的不一样,在得知即将调到移动端的时候,听说我们的技术要用到vue,Aladdin,还有es6,有点懵... 我做了以下准备工作: 1,买了本 ...

  3. iOS 伐码猿真爱—「偷懒 || 效率 工具类」

    自检 代码不会可以多敲几次,学习的重点是思想:-- 认同. BUT 如果你把自己会的.熟知的.可以说写的似流水的代码,不管是在工作 或是 自学习中你还是一点一点的敲出来,是不是有点...,copy & ...

  4. 禁止LISTCTRL表头拖动

    禁止ListCtrl表头拖动(Prevent CListCtrl column resizing) /*The header control in the ListView control sends ...

  5. 学习笔记:javascript 窗口对象(window)

    1.窗口对象属性 属性 描述 closed 返回窗口是否已被关闭. defaultStatus 设置或返回窗口状态栏中的默认文本. document 对 Document 对象的只读引用.请参阅 Do ...

  6. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

  7. MySQL5.5多实例编译安装——多配置文件

    一.什么是MySQL多实例?MySQL多实例简单的说就是在一台服务器上安装一套MySQL程序,通过不同的端口对外提供访问,多实例不仅节省物理主机成本,还有效提升了单台物理主机的CPU.磁盘I/O使用效 ...

  8. Linux与堆栈概念

    在学习C/C++编程的时候,老师都会反复灌输一些概念.比如程序内变量在堆栈上的分配,栈是由高地址到低地址,堆是由低地址到高地址等等,然后画出这样一幅经典概念图: 图片来自:http://blog.cs ...

  9. jquery之效果操作

    jQuery操作之效果 效果一共分五大类 一.基本 二.滑动 三.淡入淡出 四.自定义 五.设置 咱们先来看一下基本类 一.基本又分为 show() hide() toggle() html代码 &l ...

  10. 【flex弹性盒布局】------这个强大的功能

    你知道flex弹性布局么? 我们先来了解它的概念:Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局 ...