文档章节

写好代码的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
7.1K
5
你所不知道的程序员日常 | 哟,又在写bug呢

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

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

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

移动开发
2017/12/08
0
0
数据结构和算法(What Why How)

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

hardyyao
2018/10/05
0
0
如何在你的网站中嵌入 RunJS 的代码 (gist)?

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

红薯
2012/12/05
6.7K
41

没有更多内容

加载失败,请刷新页面

加载更多

发布xxl-job executor dotnet core 执行器的实现

DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 XXL-JOB概述 [XXL-JOB][1]是一个轻量级分布式任务调度平台,其核心设计目标...

假正经哥哥
今天
2
0
mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
今天
3
0
Spring 事务初始化源码分析

相关文章 Spring 事务使用详解 Spring AOP 创建代理的源码解析 Spring AOP 注解方式源码解析 Spring AOP 功能使用详解 Spring 的 getBean 方法源码解析 Spring bean 创建过程源码解析 Spring...

TSMYK
今天
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
今天
3
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部