代码之禅

在写代码和维护项目的时候,如果没有一个很好的代码编写习惯,很容易会写出各种诡异bug,维护也异常困难。

本篇博客总结了我自己在写代码的心得,关键是通过设计和测试大幅度降低bug。

持续更新中。。。

设计篇

原则1 单一职责

这应该是最重要的原则了,不管是方法还是类,只做尽可能少的事情,比如:

@Data
@RequiredArgsConstructor
@AllArgsConstructor
public class Person {
    @NonNull private String name;
    private int age;
}
public class SinglePrinciple {
    public static void main(String[] args) {
        Person person1 = new Person("Jock", 21);
        Person person2 = new Person("Mack", 25);
        Person person3 = new Person("Jock", 18);
        // 使用java11版本创建不可变的List
        List<Person> people = List.of(person1, person2, person3);
        List<Person> selectedPeople = checkNameAndAge(people, "Jock", 20);
        System.out.println(selectedPeople);
    }

    private static List<Person> checkNameAndAge(List<Person> people, String name, int age) {
        return people.stream().filter(p -> p.getName().startsWith(name) && p.getAge() > age)
        		.collect(Collectors.toList());
    }

}

这里面就可以看出,checkNameAndAge这个方法做了两件事情,不符合单一职责。这会给后来的维护和开发带来隐患。

我们可以把代码逻辑拆分,改的好一点。

public class SinglePrinciple {
    public static void main(String[] args) {
        Person person1 = new Person("Jock", 21);
        Person person2 = new Person("Mack", 25);
        Person person3 = new Person("Jock", 18);
        List<Person> people = List.of(person1, person2, person3);
        List<Person> selectedPeople = people.stream().filter(p -> checkAge(p, 20))
        .filter(p -> checkName(p, "Jock")).collect(Collectors.toList());
        System.out.println(selectedPeople);
    }

    private static boolean checkName(Person p, String name) {
        return p.getName().trim().startsWith(name);
    }

    private static boolean checkAge(Person p, int age) {
        return p.getAge() > age;
    }

}

得出的结果都是一样的,当然代码还有很多改善的空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值