文档章节

写好代码的10个技巧

小小程员
 小小程员
发布于 2017/09/05 15:52
字数 1585
阅读 6
收藏 0
点赞 0
评论 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
周末了放松一下 | 程序员才看得懂的笑话

专栏 | 九章算法 网址 | www.jiuzhang.com Reddit的幽默社区的程序员们卯足了力气要想出他们能想到的最好笑的编程妙语,规则只有一条:笑话必须是严格的开发人员的俏皮话。 Hi,我想听个TCP...

九章算法
2017/12/09
0
0
从玩微信小程序"跳一跳"到python程序的安装运行

最近有一个微信小程式,跳一跳,在网上流行,开始玩,到50分就一直提高不了,后来有了一些提分技巧。然后可以玩到100多分。提分技巧:http://www.pc6.com/edu/144062.html 正当我高兴着时,发...

phpervip
01/01
0
0
Flask学习笔记-PyCharm配置使用Flask-Script启动以及开启Debug模式

在PyCharm中安装Flask-Script 在上一篇文章中介绍过的如何安装Flask的插件非常方便,点击“+”号检索“flask-script”安装即可。 代码中使用Flask-Script from flask.ext.script import Man...

ykbj
2016/02/22
601
2
一些杂感杂想(三)打理业余时间的一点个人心得

2017年拍摄于云南大理洱海双廊 关于写博客 我在上一篇《一些杂感杂想(二)谈谈天天写业务代码的焦虑及该怎么办的问题》里提了一下写博客的事,对于很多人来说,没有好的文字功底或者觉得自己技...

Dunizb
2017/12/04
0
0
面向对象,更适合JavaScript

面向对象程序设计是软件开发中一个很庞大很复杂的话题,它并不是仅仅学会类、继承、封装、多态这些面向对象编程语法元素就表示掌握的,这些语法元素只是实现面向对象程序的工具, 就像砖块、...

陈宏鸿
05/07
0
0
新手PM如何与程序员有效沟通

作为互联网主要的两个斗争集体——程序猿VS产品狗,在相爱相杀中不断推动产品更新,如何与程序员有效沟通,是每一位PM基本的能力。 但实际中,不专业的PM是产品的噩梦,不配合的程序员是PM的...

LightNote
01/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
10分钟前
0
0
Confluence 6 配置快捷链接

快捷链接提供了提供了一个在 Confluence 中访问从常用资源的快速方法。当你创建一个快捷链接的时候,你需要为你的快捷链接 URL 指派一个 Key,用户可以在 Confluence 中只输入这个 Key 用来替...

honeymose
10分钟前
0
0
我的第一篇博文

网络界的前辈们好。本人从接触网络到你现在也有4、5年的时间了,期间不断的通过网络学习,当然也没少看大牛们给的建议。 2011年的9月份,如愿以偿的上了“大学”,刚上大学就接触到了一门叫做...

yeahlife
36分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
42分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
42分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
44分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
45分钟前
9
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
46分钟前
0
0
Linux系统梳理---系统搭建(一):jdk卸载与安装

1.去官网下载符合Linux版本的jdk,暂用jdk-8u171-linux-x64.rpm 2.登陆Linux,进入usr目录,创建java目录(方便管理,可以其他位置):mkdir java 3.上传下载的jdk包至Linux服务器,使用rz指令(sz f...

勤奋的蚂蚁
57分钟前
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

六库科技
59分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部