精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-18
检验下自己,也是一个不合格的程序员,反省学习
|
|
返回顶楼 | |
发表时间:2010-12-19
这个方法我记得在代码大全2里面有介绍过,也是一种好的方法。
我的平铺直叙也是这个意思,尽量使代码语言贴近自然语言。 |
|
返回顶楼 | |
发表时间:2010-12-19
yuan 写道 tuti 写道 list 就不应该为null
对,除非是第3方库某个本该返回集合的方法返回了个null才需要这么处理(我认为那也是这个库的作者不专业,而且即使是第3方库也可以自己修改)。如果是自己写的方法,从语义上说,这个方法的返回值如果是一个集合,那在该方法运行结果是这个集合为空的情况下,怎么也不应该返回null。1是影响可读性,2是其它每个调用该方法的地方还要处理这个null。返回null是自己给自己找麻烦。 LZ在另一帖中 写道 get底层的服务,别人未必想的那么周全,如果它的注释中,没有声明一定不返回null的话,我觉得判一下null是比较安全的做法。
如果给自己一个“集合为空的情况下不返回null而是返回一个空集合”的原则,就不会有这个问题。 而且即使遇到别人的代码在返回空集合时用null替代,这时候是把别人的代码改简单些好呢?还是把自己的代码改复杂来适应别人的代码好? 这样的话,lz在http://www.iteye.com/topic/841196中的代码最后可以变成这样: private List<User> getUserList2(int size) { List<User> userList = new ArrayList<User>(); userList.addAll(getUserListFromSource1(size - userList.size())); if (userList.size() >= size) return userList; userList.addAll(getUserListFromSource2(size - userList.size())); if (userList.size() >= size) return userList; userList.addAll(getUserListFromSource3(size - userList.size())); return userList; } 而且这代码还有改进的余地。但是没有上下文(对getUserList的调用;还有getUserListFromSourcex的定义),我只能写成这样。 我是完全同意集合为空的情况下不返回null而是返回一个空集合这个惯例的。 但是有以下两种情况会有纠结的地方。 1 底层代码无法改动,加入一个间接层会提高别的程序员的使用成本。 2 大型项目中,一个人所能改动的代码是有范围限制的,对于自己没有改动权限的代码问题,最多提提建议。所以这个重构也只能局限在自己的系统中。 |
|
返回顶楼 | |
发表时间:2010-12-19
zhang_xzhi_xjtu 写道 我是完全同意集合为空的情况下不返回null而是返回一个空集合这个惯例的。
但是有以下两种情况会有纠结的地方。 1 底层代码无法改动,加入一个间接层会提高别的程序员的使用成本。 2 大型项目中,一个人所能改动的代码是有范围限制的,对于自己没有改动权限的代码问题,最多提提建议。所以这个重构也只能局限在自己的系统中。 既然知道什么是对的,那就要去做。 说说都知道,但都不去做,那和不知道又有什么区别呢。 软件开发,本来就是个协作游戏,需要相互沟通和反馈,这在大型项目中,尤其重要。 极限编程(XP)主要的价值观包括:沟通,简单,反馈,勇气,尊重。 换言之,如果缺少“沟通,反馈,勇气,尊重”,那么“简单”也是做不到的。 这个返回null不就是个例子吗? |
|
返回顶楼 | |
发表时间:2010-12-20
最后修改:2010-12-20
:) 是呀,既然是一起做事,代码还是集体所有好些。面子问题一边去。
说来说去,agile对程序员的素质是有要求的,选人、组建团队很关键,招聘是第一关。招聘搞好了,麻烦事会少很多。扯远了…… |
|
返回顶楼 | |
发表时间:2010-12-20
tuti 写道 zhang_xzhi_xjtu 写道 我是完全同意集合为空的情况下不返回null而是返回一个空集合这个惯例的。
但是有以下两种情况会有纠结的地方。 1 底层代码无法改动,加入一个间接层会提高别的程序员的使用成本。 2 大型项目中,一个人所能改动的代码是有范围限制的,对于自己没有改动权限的代码问题,最多提提建议。所以这个重构也只能局限在自己的系统中。 既然知道什么是对的,那就要去做。 说说都知道,但都不去做,那和不知道又有什么区别呢。 软件开发,本来就是个协作游戏,需要相互沟通和反馈,这在大型项目中,尤其重要。 极限编程(XP)主要的价值观包括:沟通,简单,反馈,勇气,尊重。 换言之,如果缺少“沟通,反馈,勇气,尊重”,那么“简单”也是做不到的。 这个返回null不就是个例子吗? 我同意你的看法。但是就我们公司来说,即使你有想法要动,公司领导也不同意。因为他们大多要的是稳定,能用就行。我们的jdk还是1.4的,浏览器IE7有的功能不能用。但是就是说以后再动。也是无奈啊 |
|
返回顶楼 | |
发表时间:2010-12-20
一切行为都要受到实际情况的限制。
|
|
返回顶楼 | |
发表时间:2010-12-20
zhang_xzhi_xjtu 写道 代码的可读性应该还是着重强调的。
如 if(null==a) 这样的代码,至少我读起来有点别扭。 当然,更厉害的是 if(list.size()<1) 我知道有些人喜欢写成 if(list.size()==0) ok,这个我还可以想的通为什么这么写,但是<1这种写法真的让人无语。 if(list.isEmpty()) 这样当然更进一步。 毕竟,代码是给人读的。 好吧,其实一般都是这么用的 if(list!=null && !list.isEmpty()){ //xixihaha } 我们可以把对list的判null和判空抽出来,变成 if(!CollectionUtil.isEmpty(list)){ //xixihaha } 问题在于,null和empty在特定的上下文中真的是一样的吗。 list.size()==0 没有什么可读性差的。只是个人风格地问题。 为什么不这么写呢? if(CollectionUtil.isNotEmpty(list)) |
|
返回顶楼 | |
发表时间:2010-12-20
mercyblitz 写道 zhang_xzhi_xjtu 写道 代码的可读性应该还是着重强调的。
如 if(null==a) 这样的代码,至少我读起来有点别扭。 当然,更厉害的是 if(list.size()<1) 我知道有些人喜欢写成 if(list.size()==0) ok,这个我还可以想的通为什么这么写,但是<1这种写法真的让人无语。 if(list.isEmpty()) 这样当然更进一步。 毕竟,代码是给人读的。 好吧,其实一般都是这么用的 if(list!=null && !list.isEmpty()){ //xixihaha } 我们可以把对list的判null和判空抽出来,变成 if(!CollectionUtil.isEmpty(list)){ //xixihaha } 问题在于,null和empty在特定的上下文中真的是一样的吗。 list.size()==0 没有什么可读性差的。只是个人风格地问题。 为什么不这么写呢? if(CollectionUtil.isNotEmpty(list)) 这样写的可读性更好。 问题在于,null和empty在特定的上下文中真的是一样的吗。 |
|
返回顶楼 | |
发表时间:2010-12-21
zhang_xzhi_xjtu 写道 mercyblitz 写道 zhang_xzhi_xjtu 写道 代码的可读性应该还是着重强调的。
如 if(null==a) 这样的代码,至少我读起来有点别扭。 当然,更厉害的是 if(list.size()<1) 我知道有些人喜欢写成 if(list.size()==0) ok,这个我还可以想的通为什么这么写,但是<1这种写法真的让人无语。 if(list.isEmpty()) 这样当然更进一步。 毕竟,代码是给人读的。 好吧,其实一般都是这么用的 if(list!=null && !list.isEmpty()){ //xixihaha } 我们可以把对list的判null和判空抽出来,变成 if(!CollectionUtil.isEmpty(list)){ //xixihaha } 问题在于,null和empty在特定的上下文中真的是一样的吗。 list.size()==0 没有什么可读性差的。只是个人风格地问题。 为什么不这么写呢? if(CollectionUtil.isNotEmpty(list)) 这样写的可读性更好。 问题在于,null和empty在特定的上下文中真的是一样的吗。 不能完全肯定和否定,很多业务需要区分null和empty的! 一般null通过断言判断,在参数传递时,但是CollectionUtil类为了容错性,必须判断null到做empty! |
|
返回顶楼 | |