已剪辑自: https://mp.weixin.qq.com/s?__biz=MzI2MTE4Nzk5MA%3D%3D&mid=2247483685&idx=1&sn=26072d6a41ed9abef0e5e009f0a7a630&scene=45#wechat_redirect
改进方案的目的是为了提高代码质量,而不是单单为了降低圈复杂度,一切以提高代码质量为原则。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F9plFcXa-1679233463735)(null)]
技巧一、提炼函数
把子程序的一部分提取成另一个子程序,不会降低整个程序的复杂度,只是把决策点移到其他地方,但是这样做可以降低你在同一时间必须关注的复杂度水平。由于重点是要降低你需要在头脑中同时考虑的项目的数量,所以降低一个给定程序的复杂度是有价值的。
public void test(Integer number){
if(number < Integer.MIN_VALUE)
{
number = Integer.MIN_VALUE;
}
for(int i = 0; i < number; i++){
}
}
public void test(Integer number){
number = getMin(number);
for(int i = 0; i < number; i++){
}
}
function getMin(number){
if(number < Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}
return number
}
技巧二、替换算法
if(str == 'China'){
result = '中国人';
}
else if(str == 'US'){
result = '美国人';
}
else if(str == 'France'){
result = '法国人';
}
Map people = new HashMap<String ,String>();
map.put("China","中国人");
map.put("US","美国人");
map.put("France","法国人");
result = people.get(str);
技巧三、Optional
public void test(User user){
if(user != null){
String userName = user.getUserName();
Integer age = user.getAge();
if(userName != null){
userName = userName.toUpperCase();
user.setUserName(userName);
}
if(age != null){
age += 10;
user.setAge(age);
}
....
}
}
public void test(User user){
Optional<User> optional = Optional.ofNullable(user);
optional.map(u -> {
if(u.getUserName() !=null){
u.setUserName(u.getUserName().toUpperCase());
}
if(u.getAge() != null){
u.setAge(u.getAge() + 10);
}
});
}
技巧四、逆向表达
if((条件1 && 条件2) || !条件1){
return true;
}
else{
return false;
}
if(条件1 && !条件2){
return false;
}
return true;
技巧五、合并条件(将这些判断合并为一个条件式,并提取成独立函数)
if($x < 1) return 0;
if($y > 10) return 0;
if($z != 0) return 0;
if(get_result($x,$y,$z)) return 0;
技巧六、移除控制标识**(可以使用break和return取代控制标记。)**
boolean flag = false;
for(arr : arrs){
if(!flag){
if(arr == 1){
someFunction();
bool = true;
}
if(arr == 2){
someFunction();
bool = true;
}
}
}
for(arr : arrs){
if(arr == 1 || arr == 2){
someFunction();
}
break;
}
技巧七、以多态取代条件式(将整个条件式的每个分支放进一个子类的重载方法中,然后将原始函数声明为抽象方法。
switch (cat){
case ‘fish’:
eatFish();
case ‘moss’:
eatMoss();
}
public void eatFish() {
sys.out "Whale eats fish";
}
public void eatMoss() {
sys.out "Whale eat moss";
}
interface Eat {
public eatFish();
public eatMoss();
}
class Whale implements Eat {
public void eatFish() {
sys.out "Whale eats fish";
}
public void eatMoss() {
sys.out "Whale eat moss";
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)