官网地址:(点击最下方【阅读原文】可直达)https://tca.tencent.com/
官网介绍:https://cloud.tencent.com/product/tcap 官方开源:https://github.com/Tencent/CodeAnalysis 国内镜像:https://git.code.tencent.com/Tencent_Open_Source/CodeAnalysis
▼
在日常开发过程中,开发者经常会需要通过switch的方式,根据一个变量的不同值,采用不同的处理逻辑,从而导致每个case场景都会有不一样的逻辑代码。而每种case场景中可能会存在大量的if、for等执行路径,导致该函数的圈复杂度增加。
▼
如下方例子所示,每个case场景都是一个独立的代码逻辑,我们完全可以将每个case场景的代码组织在一起并独立出来,提炼为一个单独的函数。这样,便能够有效降低原函数(handleMessage)的圈复杂度,使得代码简洁易懂。
代码案例
public boolean handleMessage (Message msg) {
switch (msg.what) {
case MSG_START:
startMs = Utils.currentTimeMillis();
for(Tracker tracker : mTrackers) {
tracker.started = false;
}
if (mTrackers.size() > 0) {
mTrackers.get(0).start();
if (mTrackers.size() > 1) {
mHandler.sendEmptyMessageDelayed(MSG_NEXT, 1000);
if (mTrackers.size() > 2) {
mHandler.sendEmptyMessageDelayed(MSG_NEXT, 2000);
}
}
}
// 省略其他代码...
break;
case MSG_NEXT:
// 省略其他代码...
mHandler.removeMessages(MSG_NEXT);
break;
default:
// 省略其他代码...
mHandler.removeMessages(MSG_NEXT);
break;
}
return true;
}
▼
提炼函数之后,圈复杂度一下子便降低了,代码的理解成本也在有效的缩减。
public boolean handleMessage (Message msg) {
switch (msg.what) {
case MSG_START:
do_something_1();
break;
case MSG_NEXT:
do_something_2();
break;
default:
do_something_3();
break;
}
return true;
}
关注我们,
持续为您的代码助力!