文档章节

写好代码的10个技巧

小小程员
 小小程员
发布于 2017/09/05 15:52
字数 1585
阅读 6
收藏 0

 

<h2>写好代码的10个技巧</h2><blockquote> <p>原文:<a href="https://cdiggins.github.io/blog/programming-tips.html">10 Tips for Writing Better Code</a> <br> 作者:Christopher Diggins <br> 译者:Teixeira10</p> </blockquote><p>【译者注】在本文中,作者介绍了10个写好代码的建议,以自己切身编写代码的体会和经验来告诉开发者这10个建议的好处,并指导读者成为一个优秀而高效的程序员。 <br> 以下为译文:</p><p>那么怎样才可以使代码变得优秀呢?</p><p>好的代码可以被认为是易于阅读、理解、调试和修改的,而且最重要的是很少有缺陷。显然,编写良好的代码需要花费更多的时间,但从长期看会有更多的价值,因为维护和重用代码的成本会变的更低。</p><p>事实上,我们可以将好代码与可重用的代码等同起来,这是许多技巧背后的统一原则。作为一个开发特定功能的程序员,代码可能会实现你的短期目标,但是如果没有其他人想重用它的话(包括你自己),那么它一定是有缺点的,要么它太复杂,要么太具体,而且很可能在不同的情况下崩溃,从而导致其他程序员不相信这些代码。</p><p>我发现,尝试将下列最佳实践应用于你所编写的所有代码(包括你的实验和原型代码),可以让你写出更好的代码,而不用考虑你的经验水平。</p><h3>1. 遵循单一责任原则</h3><p>在程序员的代码库中,函数是最重要的抽象形式。可以重用的代码越多,编写的代码就越少,它们的可靠性也就越高。遵循<a href="https://en.wikipedia.org/wiki/Single_responsibility_principle">单一责任原则</a>的小功能代码就更有可能被重用。</p><h3>2.最小化共享状态</h3><p>你应该最小化函数之间的隐式共享状态,无论它是文件作用域变量还是对象的成员字段,都支持显式的值作为参数。当代码明确了该函数需要什么来产生期望的结果时,代码就变得更容易理解和重用。</p><p>这种情况下,你应该优先选择静态无状态变量,而不应该选择对象上的成员变量。</p><h3>3.本地化的副作用</h3><p>理想的副作用(例如:控制台打印、日志记录、改变全局状态、文件系统操作等等)应该放在单独的模块中,而不是分散在整个代码中。功能上的副作用常常违反单一责任原则。</p><h3>4. 优先使用不可变对象</h3><p>如果一个对象的状态在其构造函数中被设置一次,并且再也不会发生变化,那么调试就变得容易得多了,因为一旦构造正确,它仍然有效。这是减少软件项目复杂性的最简单方法之一。</p><h3>5.多用接口少用类</h3><p>使用接口(或在C++中使用模板参数或概念)的函数比在类上运行的函数更容易被重用。</p><h3>6. 将好的原则应用于模块</h3><p>寻找机会,将软件项目分解为更小的模块(例如:库和应用程序),以鼓励模块级的重用。模块的一些关键原则是:</p><pre><code>1.依赖最小化 2.每个项目都应该有一个明确的功能 3.不要重复 </code></pre><p>你应该努力使你的项目小而明确。</p><h3>7. 避免继承</h3><p>在面向对象编程中,特别是在虚函数中,继承在可重用性方面往往是一个死死穴。我几乎没有成功地编写或使用那些能覆盖类的库。</p><h3>8. 在设计和开发过程中进行测试</h3><p>我并不是测试驱动开发的铁杆拥护者,但随着开始编写代码,测试代码会自然而然地遵循许多指导原则。它还可以帮助我们更早地发现很多错误。但是,要避免编写无用的测试代码,良好的编码意味着更高级别的测试(例如:集成测试或单元测试以及功能测试),而且在揭示缺陷方面更有效。</p><h3>9.优先选择而不是手写标准库</h3><p>我无法告诉你我多久才能见到一个std::vector 或std::string更好的声明,但这几乎总是浪费时间和精力的。除了显而易见的事实,你正在引入一个bug(参见技巧10),其他程序员不太可能重用你的代码,因为这不是那些被广泛理解、支持和测试的代码。</p><h3>10. 避免编写新的代码</h3><p>这是每个程序员都应该遵循的:“The best code is the code that isn’t written”(最好的代码是不用被复写的代码)。你拥有的代码行数越多,你的缺陷就越多,发现和修复bug的难度就越大。</p><p>在编写一行代码之前,问自己,是否有一个工具、函数或库已经完成了你所需要的工作?你真的需要那个功能而不是调用另一个已经存在的函数吗?</p><h3>最后</h3><p>编程是一种非常类似于学习的一种艺术形式或一种运动的技能,通过用心练习,不断地从别人那里学习,才会编写的更好。不断提高代码质量将有助于你成为一个更高效的程序员。</p>

如果你对编程感兴趣,想成为优秀的程序员就到 。。。。

深圳市森竹科技有限公司 0元试学,0基础到精通,百余家知名企业合作,百分百推荐就业!!

了解更多资讯请关注 深圳市森竹科技有限公司 

微信公众号↓:森竹IT训练营 

  

本文转载自:http://www.sohu.com/a/169414304_115128

共有 人打赏支持
小小程员
粉丝 0
博文 10
码字总数 7123
作品 0
揭阳
私信 提问
jQuery Mobile + PhoneGap的Android应用怎么调试

环境:eclipse3.6/adt18/sdk4.0/jqm1.2/phonegap2.1/jquery1.8/chrome/safari 我现在使用jqm+phonegap开发一个android应用 在本地用jqm写好页面代码用浏览器调试好,然后用jsonp跨域请求数据...

atearsan
2012/10/19
7K
5
你所不知道的程序员日常 | 哟,又在写bug呢

专栏 | 九章算法 网址 | http://www.jiuzhang.com 作为一名程序员,我们的工作和生活总是在焦急——兴奋——失落之间循环着。但也正是因为这份职业的不平静,让我们的生活充满乐趣,十分值得...

02/20
0
0
移动开发工具使用技巧之eclipse debug不生效解决方法

移动开发工具使用技巧之eclipse debug不生效解决方法。 ①eclipse debug不生效 记录一下eclipse debug不生效的自己犯得NC原因。 很有可能你点的断点位置,压根就没有运行到,断点位置太靠后了...

移动开发
2017/12/08
0
0
如何在你的网站中嵌入 RunJS 的代码 (gist)?

RunJS 推出的一个叫做 Gist (此名完全来自与 Github 同样功能)的小功能,假如你在 RunJS 上写好了代码,你可以在自己的网站中加入如下 script 标签来引用该代码,代码将被语法着色,另外你...

红薯
2012/12/05
6.2K
41
数据结构和算法(What Why How)

数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 从狭义上讲,是指某些著名的数据结构和算法,比如队列、堆、栈、二分查找、动态规划等...

hardyyao
10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 懒床是对冬天最起码的尊重

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享daniwellP/桃音モモ的单曲《Nyan Cat》 《Nyan Cat》- daniwellP/桃音モモ 手机党少年们想听歌,请使劲儿戳(这里) @巴拉迪...

小小编辑
今天
27
2
码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
4
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部