11步提高代码质量和整体工作效率

作为专业程序员这些年来学到的能真正提高代码质量和整体工作效率的11件事情。

1. 永远不要复制代码

不 惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里。重复的代码会导致你的同事 在读你的代码时产生困惑。而重复的代码如果在一个地方修改,在另外一个地方忘记修改,就会产生到处是bug,它还会使你的代码体积变得臃肿。现代的编程语 言提供了很好的方法来解决这些问题,例如,下面这个问题在以前很难解决,而如今使用lambdas却很好实现:

 
/// <summary>
/// 一些函数含有部分重复代码
/// </summary>
void OriginalA()
{DoThingsA();// unique codeDoThingsB();
}/// <summary>
/// 另外一个含有部分重复代码的函数
/// </summary>
void OriginalB()
{DoThingsA();// 没有重复的代码DoThingsB();
}

现在我们重构含有部分相同代码的函数,用delegate模式重写它们:

 
/// <summary>
/// Encapsulate shared functionality
/// </summary>
/// <param name="action">User defined action</param>
void UniqueWrapper(Action action)
{DoThingsA();action();DoThingsB();
}/// <summary>
/// New implmentation of A
/// </summary>
void NewA()
{UniqueWrapper(() =>{// unique code});
}/// <summary>
/// New implementation of B
/// </summary>
void NewB()
{UniqueWrapper(() =>{// unique code});
}

 

2. 留意你开始分心的时候

当你发现自己在浏览facebook或微博、而不是在解决问题,这通常是一种你需要短暂休息的信号。离开办公桌,去喝一杯咖啡,或去跟同事聊5分钟。尽管这样做看起来有点反直觉,但长久去看,它会提高你的工作效率。

3. 不要匆忙赶任务而放弃原则

当带着压力去解决一个问题或修改一个bug,你很容易失去自制,发现自己匆匆忙忙,甚至完全忘了一直坚持的重要的测试过程。这通常会导致更多的问题,会让你在老板或同事眼里显得很不专业。

\

4. 测试你完成的代码

你知道你的代码能做什么,而且试了一下,它确实好用,但你实际上需要充分的验证它。分析所有可能的边界情况,测试在所有可能的条件下它都能如期的工作。如果有参数,传递一些预期范围外的值。传递一个null值。如果可能,让同事看看你的代码,问他们能否弄坏它。单元测试是到达这种目的的常规方法。

5. 代码审查

提交你的代码之前,找个同事一起坐下来,向他解释你做了哪些修改。通常,这样做的过程中你就能发现代码中的错误,而不需要同事说一句话。这比自己审查自己的代码要有效的多得多。

6. 让代码更少

如果你发现写了大量的代码来解决一个简单的问题,你很可能做错了。下面的boolean用法是一个很好的例子:

if (numMines > 0) { enabled=true; } else { enabled=false; }

这时你应该写成这样:

enabled = numMines > 0;

代码越少越好。这会使bug更少,重构可能性更小,出错的几率更小。要适度。可读性同等重要,你可不能这样做而使代码丧失可读性。

7. 为优雅的代码而努力

优 雅的代码非常的易读,只用手边很少的代码、让机器做很少的运算就能解决问题。在各种环境中都做到代码优雅是很难的,但经过一段时间的编程,你会对 优雅的代码是个什么样子有个初步的感觉。优雅的代码不会通过重构来获得。当你看到优雅的代码是会很高兴。你会为它自豪。例如,下面就是一个我认为是优雅的 方式来计算多边形面积的方法:

 
static public double GetConvexPolygonArea(Vector2[] vertices)
{double area = 0;for (int i = 0; i < vertices.Length; i++){Vector2 P0 = vertices[i];Vector2 P1 = vertices[(i + 1) % vertices.Length];area += P0.Wedge(P1);}return area / 2;
}

 

8. 编写不言自明的代码

勿庸置疑,注释是编程中很重要的一部分,但能够不言自明的代码跟胜一筹,因为它能让你在看代码时就能理解它。函数名变量名要慎重选择,好的变量/方法名字放到语言语义环境中时,不懂编程的人都能看懂。例如:

 
void DamagePlayer(Player player, int damageAmount)
{if (!player.m_IsInvincible && !player.m_IsDead){player.InflictDamage( damageAmount );}
}

 

能自我说明的代码不能代替注释。注释是用来解释“为什么”的,而自我说明的代码是来描述“是什么”的。

9. 不要使用纯数字

直接把数字嵌入代码中是一种恶习,因为无法说明它们是代表什么的。当有重复时更糟糕——相同的数字在代码的多个地方出现。如果只修改了一个,而忘记了其它的。这就导致bug。一定要用一个命名常量来代表你要表达的数字,即使它在代码里只出现一次。

10. 不要做手工劳动

当做一系列动作时,人类总是喜欢犯错误。如果你在做部署工作,并且不是一步能完成的,那你就是在做错事。尽量的让工作能自动化的完成,减少人为错误。当做工作量很大的任务时,这尤其重要。

11. 避免过早优化

当你要去优化一个已经好用的功能代码时,你很有可能会改坏它。优化只能发生在有性能分析报告指示需要优化的时候,通常是在一个项目开发的最后阶段。性能分析之前的优化活动纯属浪费时间,并且会导致bug出现。

转载于:https://www.cnblogs.com/03-tornado/archive/2013/01/03/2843178.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CDZSC_2015寒假新人(1)——基础 i

Description “Point, point, life of student!” This is a ballad&#xff08;歌谣&#xff09;well known in colleges, and you must care about your score in this exam too. How many points can you get? Now, I told you the rules which are used in this course. T…

MySql触发器使用

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

用js添加网页标题时,在QQ里无效,标题栏空白

网页中的标题是从后台数据获取的,用document.title"我的标题",在微信里正常显示标题,但在扣扣里标题栏是空白的,在网上查到一段代码,粘贴上就好了。。。代码如下&#xff1a; var $body $(body);document.title “我的标题”;//兼容 在QQ中设置标题无效,标题不显示…

快速学习23种设计模式思想Design Patterns

1、factory&#xff08;工厂&#xff09;追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西&#xff0c;虽然口味有所不同&#xff0c;但不管你带MM去麦当劳或肯德 基&#xff0c;只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的F…

前端优化实例

页面&#xff1a;m.babytree.com/ask建议&#xff1a;1.降低网络负荷1.1缩小图片尺寸&#xff1a;100-1.png:由252*100 缩小到 127*50100-2.png:由272*100 缩小到 127*50Pregnancy.png: 由144*144 缩小到 72*721.2压缩以下资源图片名称&#xff1a;icon-mak.jpg,icon-weixin.jp…

Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

关于mysql

MariaDB[4] 的API和协议兼容MySQL&#xff0c;另外又添加了一些功能&#xff0c;以支持本地的非阻塞操作和进度报告。这意味着&#xff0c;所有使用MySQL的连接器、库和应用程序也将会在MariaDB下工作。在此基础上&#xff0c;由于担心甲骨文MySQL的一个更加封闭的软件项目&am…

正则表达式验证

/判断输入内容是否为空 function IsNull(){ var str document.getElementById(str).value.trim(); if(str.length0){ alert(对不起&#xff0c;文本框不能为空或者为空格!);//请将“文本框”改成你需要验证的属性名称! } } //判断…

我注册了某音帐号之后。。。(内涵推荐算法)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

【转】ORACLE中的子查询 ---OCP--047--46

“子查询”就是查询中嵌套着另一个查询&#xff0c;也即通过SELECT语句的嵌套使用形成子查询。当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果。ORACLE中常见的子查询有下面几类&#xff1a;A、单行子查询(Single-row subqueries)。B、多行子…

第5讲++创建管理数据库

实例 create database db on (namedb51,filenameD:\xxx\db51.mdf,size100,maxsize200,filegrowth20 ), (namedb52,filenameD:\xxx\db52.ndf,size100,maxsize200,filegrowth20 ), (namedb53,filenameD:\xxx\db53.ndf,size100,maxsize200,filegrowth20 ) log on (namedb5log1,fi…

R数据分析:如何简洁高效地展示统计结果

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

实现权重计算

今天试图实现内部点权重的计算。在论文中&#xff0c;权重的计算过程是这样的:其中solveNNLS是求解这个方程s为表面点&#xff0c;q为内部点发现两种方法&#xff1a;1.一种是把内部点位置表示成表面点的线性组合2.另一种是把内部点的位移表示成表面点的线性组合第2种可以化成内…

Android LBS系列05 位置策略(一)

Location Strategies 定位的实现 在Android系统上实现定位主要是通过GPS或者是基于网络的定位方法。 GPS是精度最高的&#xff0c;但是它只在户外有用&#xff0c;并且很耗电&#xff0c;并且首次定位花费时间较长。 基于网络的定位利用通信网络蜂窝基站和Wi-Fi信号&#xff0c…

使用并查集解决的相关问题

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

ABP官方文档翻译 3.1 实体

实体 实体类聚合根类 领域事件常规接口 审计软删除激活/失活实体实体改变事件IEntity接口实体是DDD(领域驱动设计)的核心概念之一。Eric Evans描述它为"An object that is not fundamentally defined by its attributes, but rather by a thread of continuity and identi…

目标检测之线段检测---lsd line segment detector

&#xff08;1&#xff09;线段检测应用背景 &#xff08;2&#xff09;线段检测原理简介 &#xff08;3&#xff09;线段检测实例 a line segment detector &#xff08;4&#xff09;hough 变换和 lsd 的区别 ---------------------author&#xff1a;pkf ------------------…

struts:file 提交给action后获取文件信息

参考&#xff1a; 1&#xff09;http://gemini.iteye.com/blog/67712 2&#xff09;http://bbs.csdn.net/topics/320228159 转载于:https://www.cnblogs.com/lpshou/archive/2013/01/15/2861581.html

利用Mac创建一个 IPv6 WIFI 热点

标签&#xff1a; iOSIPv6Create NAT64 NetWork创建NAT64网络2016-05-20 10:58 14156人阅读 评论(11) 收藏 举报分类&#xff1a;开发技巧&#xff08;8&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 苹果商店6月1日起&#xff0c;强…

SQL2000 MD5加密

原文:SQL2000 MD5加密 /***************************************************************************** * Name: T-SQL MD5算法实现 * Author: Rambo Qian * Create Date: 2003-04-10 * Last Modified by: Rambo Qian * Last Update Date: 2003-04-16 * Version: V1.…