`
zhang_xzhi_xjtu
  • 浏览: 536399 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

老生常谈之如何写好的代码

阅读更多
这两天一直做code review,经常看着看着就有一种要死的冲动。
好的代码,一个老生常谈的问题。结合最近的实践,总结一下常见的问题。

1 了解你的代码
很多程序员并不了解自己的代码。
比如null!=Object,很多人已经不知道为什么会有这样一个编码规范,怕if(Object!=null)写成Object=null通过判断。我并不喜欢这个规范,因为读起来不自然。

2 不要盲从
一段程序catch一个RuntimeException,把这个RuntimeException封装成一个新的RuntimeException又抛出来,问他为什么这么做,他说上层的程序catch不到这个RuntimeException,要自己构建一个RuntimeException才能catch住。而且他还咨询了别人的意见,参考了其他的代码。
我问他这样合理吗,这样可以解决问题吗,一段程序catch不到原生的RuntimeException,凭什么就能catch住你封装又抛出的RuntimeException。他的最大理由是别人这么说,所以就这么做了。同学,坚持一下自己。你应该知道这是不可能的。
后来发现问题在于打日志的程序写错了,打的是原生的toString方法,所以导致他以为没有catch到异常。
别人的代码catch是为了加入一些自定义错误消息。

3 不要产生无用的对象
A a=new A();
if(condition){
  a=getAFrom();
}else{
  a=getAFrom();
}
这样的new有什么用,唯一的用处就是产生垃圾。

4 不要轻易怀疑类库,先怀疑自己
一段js返回一个日期的7天前的日期,结果多了一天。结果理由就是类库出错,需要java程序员计算该值,然后传入。
当然不能这么搞了,仔细研究了代码之后,发现是js写错了。

5 命名
这个基本所有的编程书都讲了,但是估计很多的程序员对这个东西并没有足够的重视。变量,方法,类的命名一定要想一些时间再命名,不要贪图一时之快。

6 去除重复代码
这个应该算是最著名的bad code smell了。但是看代码的时候还是会不时发现一大堆重复code。
该重构了,今天重构的时候就发现了一个简单的常量两处设置不一样,但是程序的内容和意义都是一样。如果这个拖到以后,又是一个坑。

7 遵循习惯
java的实例变量的默认值大家都是知道的。请不要在一个有20-30个实例变量的类中,突然有一个boolean设成true。我一般一看这么多的实例变量,都是默认认为它们的初始值是java默认初始值。当然,一个类本身有20-30实例变量本身就是一个很扯的事情。

8 不要无用的代码
系统总是有一些历史原因,永远不会执行到的代码,发现了就删掉吧。程序员已经很辛苦了,不要让大家把时间浪费在没有用的事情上。而且,这个东西,很有可能引起读着对程序的误读。

9 没有小事
别催了。让我专业的写程序,哪怕你觉的只是加一个变量的问题,我还有很多东西需要考虑呢。这个变量加在什么地方,叫什么名字,什么类型,如何使用,测试怎么办。一大堆问题等着我呢。

10 态度
这两天看代码,总结就是如下:
前人拉屎,后人擦屁。
你不想擦屁吧,那么不要到处。。。。。。。
分享到:
评论
12 楼 jorneyR 2010-11-05  
7 遵循习惯
java的实例变量的默认值大家都是知道的。请不要在一个有20-30个实例变量的类中,突然有一个boolean设成true。我一般一看这么多的实例变量,都是默认认为它们的初始值是java默认初始值。当然,一个类本身有20-30实例变量本身就是一个很扯的事情。

这个不同意,如果这是一件很扯的事情,那么整个JDK就是在扯蛋。
11 楼 Zahir 2010-11-05  
skzr.org 写道
Thanks!

总结的非常棒啊
自己的一点想法,打算尝试下:
对于命名一直在纠结中,取名太费时间了
A 通用命名规则大家都差不多
B 从Action到用户这一端,直接使用汉语拼音命名!
C 用户的数据表,表名和字段也用汉语拼音

这样客户和英语不好的都可以看懂。



public class YongHuGuanLiAction {

    public String tianJiaYongHu() {
      //....
    }

    public String shanChuYongHu() {
     //....
    }

}



这样的代码你真的能忍?
10 楼 javaLife 2010-11-05  
写得好,也很实际
9 楼 paranoid945 2010-11-05  
很多情况老板只是让你搥出一个看上去好看能用的东西然后最大化赚钱而已。要不然为啥那么喜欢雇工资才2,3k的程序员,何况大多数的项目都是靠着第一波比较厉害的程序员,然后再找理由搞掉他们,换一批低廉的程序员擦屁股...
很多情况是很搞笑的,比如有好些人特意不写注释,为的就是让这块代码只有自己懂,然后别人搞不定只能找他。中国人自古就没有牺牲奉献精神,从不会做“前人栽树,后人乘凉”的事情,而是做“前人砍树,后人的事情跟我就没有关系了”
8 楼 skzr.org 2010-11-05  
Thanks!

总结的非常棒啊
自己的一点想法,打算尝试下:
对于命名一直在纠结中,取名太费时间了
A 通用命名规则大家都差不多
B 从Action到用户这一端,直接使用汉语拼音命名!
C 用户的数据表,表名和字段也用汉语拼音

这样客户和英语不好的都可以看懂。
7 楼 qiaoqinqie 2010-11-05  
junit的源码很好吗?看看去
6 楼 matychen 2010-11-05  
freish 写道
老生常谈之如何赚到钱,代码好不好我实在无力关心

任务多,时间紧。
哎!!!
5 楼 freish 2010-11-05  
老生常谈之如何赚到钱,代码好不好我实在无力关心
4 楼 DanaJeanie 2010-11-05  
说的很有道理啊,这两天看别人写的代码。。。产生同感啊
3 楼 cleanerje 2010-11-05  
现在很多程序员都很浮躁,从来不会想:这个代码为什么要这样写。
当然了,很多程序员都是为了混口饭吃,根本没有钻研的心态,唉!
2 楼 langyu 2010-11-05  
1. 态度
2. Java编码规范
3. 优秀的源码例子 Junit等
1 楼 yvfeng 2010-11-05  
总结的很有道理啊,有些变量或方法的命名和它本身想表达的意义相差十万八千里,唉

相关推荐

    C#,深度好文,精致好码,文本对比(Text Compare)算法与源代码

    C#,深度好文,精致好码,文本对比(Text Compare)算法与源代码 在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间...

    老生常谈的24种Java设计模式

    了解和掌握这些设计模式,有助于开发人员更好地组织代码,提高代码的可读性和可维护性,同时也有助于促进团队之间的合作和沟通。 注:本文格式为xmind,需要xmind软件(支持手机端、PC端)。助力读者利用碎片时间...

    老生常谈JS中的继承及实现代码

    这些示例代码演示了JavaScript中实现继承的几种方式,每种方式都有其适用的场景和特点。理解这些继承方式,对于学习和使用JavaScript面向对象编程是非常重要的。在实际开发中,开发者可以根据具体需求选择合适的继承...

    老生常谈javascript的面向对象思想

    封装是面向对象编程的核心思想之一,它指的是将数据(或属性)和操作数据的代码(或方法)捆绑在一起形成一个对象,从而将对象的实现细节隐藏起来,外部代码通过对象提供的接口与其进行交互。封装可以减少编程错误,...

    【原创】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)

    C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,...

    老生常谈Python基础之字符编码

    我们知道,计算机只能识别二进制,我们平时写的代码都需要转成二进制才能被计算机识别。所以,我们写的字符怎么转换成二进制呢,这个过程实际就是通过一个标准使我们写的字符与特定数字一一对应,这个标准就称为字符...

    重构-改善既有代码的设计+中文版

    当对象技术成为老生常谈之后,尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    重构改善既有代码的设计

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    老生常谈android中的事件传递和处理机制

    在Android开发中,事件传递...理解这一机制能够帮助开发者更好地控制用户交互,提高应用的用户体验。通过不断实践和学习,开发者可以熟练掌握这个机制,并运用到日常开发中,从而编写出更加灵活、响应迅速的应用程序。

    重构-改善既有代码的设计.chm

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    重构-改善既有代码的设计(中文版)

     当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,...

    重构-改善既有代码的设计中文版

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,...

    js老生常谈之this,constructor ,prototype全面解析

    javascript中的this,constructor ,prototype,都是老生常谈的问题,深入理解他们的含义至关重要。在这里,我们再来复习一下吧,温故而知新! this this表示当前对象,如果在全局作用范围内使用this,则指代当前页面...

    重构-改善即有代码的设计.pdf

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    重构-改善既有代码的设计(中文版)

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    老生常谈Python之装饰器、迭代器和生成器

    ### 老生常谈Python之装饰器、迭代器和生成器 #### 一、装饰器 装饰器是Python中的一个重要特性,它提供了一种在不改变原函数代码的情况下为函数添加新功能的方法。这对于增强代码的灵活性和可维护性至关重要。 #...

    老生常谈python之鸭子类和多态

    多态性使得代码更具通用性和可扩展性,是面向对象编程的重要特性之一。Python 作为一种动态类型的语言,其多态性表现得尤为明显。 一、多态的定义与特点 1. 多态意味着一个类型可以表现出多种行为或形态。在面向...

    重构-改善既有代码的设计

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

Global site tag (gtag.js) - Google Analytics