自从十月中旬之后,由于考试和工作等原因,未能更新博客,今天将回归到常态,持续更新。
“分解条件表达式”主要就是从if、then、else中分别提炼出独立函数。
我们知道,在程序中,复杂的条件逻辑是最常导致复杂度上升的地点之一。我们需要编写代码来检查不同的分支条件、根据不同的分支做不同的事,然后,我们很快就会得到了一个相当长的函数。再然后,代码的可读性就下降了,而条件逻辑则会使代码更难阅读。
我们在处理大块头的代码时,常会把它分解成许多个独立的函数,根据每个代码块的用途,为分解出来的函数命名,从而更清晰地表达自己的意图。对于条件语句,我们也可以这么做。看下面这个例子:
if (username == null || username.equals("") || password == null || password.equals("")) {
//todo
}
这段条件代码要做的事情就是判断用户名和密码是否正确,但是它用了三个“||”运算符,整个条件判断显得十分冗长。那么,怎么简化呢?我们可以分别把它们提出来,就像下面这样:
if (userNameIsValid(username) && passwordIsValid(password)) return true;
//todo
}
private boolean userNameIsValid(Object userName) {
if (userName == null || userName.equals("")) return false;
return true;
}
private boolean passwordIsValid(Object password) {
if (password == null || password.equals("")) return true;
return true;
}
当然了,在上面的这个例子中,我使用的if (username == null || username.equals("") || password == null || password.equals("")) 其实算是比较简单的,在项目中,一些条件判断语句往往要比这复杂的多。不要觉得条件语句很短就没有提炼的必要,我们要关注的是代码意图和它自身的差距。提炼之后可读性会更高,它看起来就像一条注释一样简单明了。
我的博客原文:http://www.xubitao.cn/blog/2014/11/19/decompose-conditional/ |