优秀编码原来也可以这么容易--编码四原则

文/罗恩良

优秀编码很难。即使在有很多编码书籍、编程规范的情况下,绝大部分项目输出的代码依旧质量不高。

为什么会出现这种情况?我觉得主要是因为不分轻重面面俱到,“面面俱到”必然导致“面面不到”。数十本编码必读的书籍、好几千页、22 种坏味道、72 种重构方法,让绝大多部程序员不堪重负,根本记不住,更不说有效地应用了。

那有没有简单有效的方法快速提升团队的编码水平,人人都能写高质量优秀代码?

本篇文章总结提取出优秀编码最重要的四个原则,不用面面俱到,只是简单地应用了此四原则,我所在部门团队的编码水平就提高了一个层次。团队有部分成员也反馈现在的编码水平和二个月前的编码已不在同一个层次。

优秀编码四大原则

优秀编码原则 1单一抽象层次

我个人认为,函数单一抽象层次是优秀编码中最重要的原则,没有之一!单一抽象层次指一个函数或者方法中所有的操作处于相同层次。

如上图所示,一个函数或方法中所有的操作处于相同逻辑层次。

优秀编码原则 2最小化缩进

过分深层的缩进,或者“嵌套”已经困扰了计算机界达几十年之久,而且至今仍然是产生混乱代码的罪魁祸首之一。

Noam Chomsky 和 Gerald Weinberg 做过一份研究表明,很少有人能够理解超过 3 层的嵌套 (Yourdon 1986a),很多研究人员建议避免使用超过 3 层的嵌套。

如上图所示,以卫语句取代嵌套条件表达式是最少化缩进的精髓之一。卫语句可以把我们的视线从异常处理中解放出来,集中精力到正常处理的代码中。

上面这段代码可以改编成下面的样式:

总结: 如下图所示,简化复杂的 if else 语句,基本就是三个手段:

  • 针对头重脚轻的 if else,尽早使用 return 返回,从而减少嵌套层次;
  • 合并分支。有些分支持执行的内容相同,可以合并成为一个分支;
  • 扁平化。这个例子就是扁平化最好的示例。

优秀编码原则 3清晰表达式

优秀代码不是越少越好,而是理解它所花的时间越少越好。

代码应当使别人理解它所需的时间最小化---这就是非常重要的“可读性基本定理”。

清晰表达式原则是这个基本定理的一个重要原则之一。

什么是清晰表达原则?以下是一些例子,请各位参考。

优秀编码原则 4善用辅助类拆分

前面讲的三个原则都是在讨论如何编写良好的函数,编写良好易读的代码行和代码块,现在我们来把注意力放在代码组织的更高层面,这一部分将涉及到软件设计中最重要的能力——类的职责分配问题

如果你编写的类有几十个甚至上百个方法,或上千行代码,一般都说明这个类设计上有问题了。

类和人一样,职责多的类就像职责多的领导,领导需要秘书和助理,因为秘书和助理能帮助领导从琐事中解放出来。巨型类也一样,也需要辅助类把与主业务逻辑无关的事移除出去。

哪些琐事应该交给助理来处理?不产生数据的函数,不修改数据的函数,或有输入就有明确输出的函数,不和外部对象交互的函数等。

下面是两个例子:

结束语一些编码理念

  • 理解函数所花的时间,应该越短越好。

  • 笔者认为人人都能写优秀代码,优秀代码都是一遍一遍地改出来的。允许先写肮脏的代码,但必须重构它。

(更多华为资讯请关注华为开发者社区,华为自己的对外开放门户:http://developer.huawei.com/cn/ict/ ,不要问我叫啥,别人都叫我雷锋)

时间: 2024-10-24 16:00:28

优秀编码原来也可以这么容易--编码四原则的相关文章

Java Web 编码问题一:jsp的编码问题

首先我们来看一张由eclipse生成的jsp文件的头: 图1:JSP文件编码 如上图所示jsp中的三个编码, ①代表的是服务器响应客户端请求的编码方式.服务器会用它来设置http响应头的content-type.就好比在Servlet中用response.setContentType("text/html;charset=utf-8")的作用.可以在浏览器的Header中响应头中的Content-Type中看到. ②pageEnconding的编码是值jsp文件本身被编码的编码格式.因

Linux下查看文件编码,文件编码格式转换和文件名编码转换

linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是 UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set file

字符编码乱码问题(servlet底层 编码大揭秘)

好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现).好郁闷,这是为什么呢.有下面分析下,说的不好可以吐槽 话说我们能遇到这种编码的问题,归根结底就是这  这 web开发不是中国人开发的,中国文化博大精深,四大发明渊源流传,可惜,我们太自己为是了,来了个闭关锁国政策,弄得中国跟不上时代的步伐,不潮了,落伍了,互联网时代被西方人抢了个先,发明了,我们只能用别人的了.我们也知道,西方讲的是英语,所以他们采用的编码格式是iso-8895-1.而这  这种编码方式只占两个

[转] 从此不再惧怕URI编码:JavaScript及C# URI编码详解

混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Server.UrlEncode.Uri.EscapeUriString.Uri.EscapeDataString JavaScript中的还好,只提供了三个,C#中主要用的就有这么多,还没有列出其他编码(HTML),一多就弄不明白,弄不明白就心生恐惧,心生恐惧就变得苦逼,本文就向大家详细解释在JavaSc

【转】关于URL编码/javascript/js url 编码/url的三个js编码函数

来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),encodeURI(),encodeURIComponent() 本文为您讲述关于js(javascript)编码url的相关问题.(js中url编码&符号后传值给其它页面,多参数网址作为整体编码后传值.如:http://www.ilcng.com/index.html?id=http://ilcng

中国行政区编码_邮政编码_区号编码

原文:中国行政区编码_邮政编码_区号编码 源代码下载地址:http://www.zuidaima.com/share/1550463699946496.htm 中国行政区编码_邮政编码_区号编码SQL文件备份,提供给大家下载使用. 源码截图:

字符编码详解——彻底理解掌握编码知识,“乱码”不复存在

每一个程序员都不可避免的遇到字符编码的问题,特别是做Web开发的程序员,"乱码问题"一直是让人头疼的问题,也许您已经很少遇到"乱码"问题,然而,对解决乱码的方法的内在原理,您是否明白?本人作为一个程序员,在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂.不清不楚:在工作中也曾经遇到一个很烦人的编码问题.这两天在网上收集了大量编码方面的资料,对字符编码算是理解的比较清楚了.下面把我认为比较重要的知识点记录下来,一方面方便以后复习:另一方面也希望给跟我一样懵懵

MySQL的字符编码体系(二)——数据传输编码

MySQL的字符编码体系可以分成两部分:一部分是关于数据库服务器本身存储数据表时如何管理字符数据的编码:另一部分是关于客户端与数据库服务器传输数据如何编码.上一篇MySQL的字符编码体系(一)--数据存储编码讨论了数据存储编码,本篇讨论数据传输编码. MySQL的客户端可以分为两种:一种就是用C语言写的官方客户端--MySQL命令程序:一种就是平常程序员使用JDBC等connector API写成的客户端.这里只讨论第一种. Windows客户端 MySQL命令程序在Windows和Linux系

Linux下批量把GDK编码的文章转化为UTF-8编码的文章以及“iconv: 未知 xxx 处的非法输入序列”错误处理

Linux下批量转换GBK文件到UTF-8编码方法 查看文件编码 file -i filename 1.递归转换(包括子文件夹) find default -type d -exec mkdir -p utf/{} \; find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \; 这两行命令将default目录下的文件由GBK编码转换为UTF-8编码,目录结构不变,转码后的文件保存在utf/default目录下. 2.转换 命