实践中的重构08_集合判空时的可读性
程序员文章站
2022-05-31 09:00:47
...
代码的可读性应该还是着重强调的,毕竟,代码是给人读的。如
这样的代码,看的出是从c惯用法继承下来,试着读一下,当null不为a,则如何如何。至少我读起来有点别扭。我还是喜欢这样的形式,当a不为null,则如何如何。
当然,更厉害的是经常看到如下的片段
ok,size==0这个我还可以想的通为什么这么写,但是<1这种写法真的让人无语。
这样当然更进一步。为什么呢,因为使用size是因为我们知道该类的内部实现,判断时涉及了类的实现,而isEmpty只是语义上判断一个列表是否为空,不涉及实现细节。
还有一种挺常见的,好的做法是集合类引用对象永远不用判null。
我们可以把对list的判null和判空抽出来,变成
更进一步。
问题在于,null和empty在特定的上下文中真的是一样的吗。
if(null==a)
这样的代码,看的出是从c惯用法继承下来,试着读一下,当null不为a,则如何如何。至少我读起来有点别扭。我还是喜欢这样的形式,当a不为null,则如何如何。
当然,更厉害的是经常看到如下的片段
if(list.size()==0)
if(list.size()<1)
ok,size==0这个我还可以想的通为什么这么写,但是<1这种写法真的让人无语。
if(list.isEmpty())
这样当然更进一步。为什么呢,因为使用size是因为我们知道该类的内部实现,判断时涉及了类的实现,而isEmpty只是语义上判断一个列表是否为空,不涉及实现细节。
还有一种挺常见的,好的做法是集合类引用对象永远不用判null。
if(list!=null && !list.isEmpty()){
// do something.
}
我们可以把对list的判null和判空抽出来,变成
if(!CollectionUtil.isEmpty(list)){
// do something.
}
更进一步。
if(CollectionUtil.isNotEmpty(list)){
// do something.
}
问题在于,null和empty在特定的上下文中真的是一样的吗。
推荐阅读