设计师a 网站,设计师的职责,设计公司logo的网站,手机pc微信三合一网站最近在重构些老项目#xff0c;发现了些比较典型的代码块。
想到这些常见的写法#xff0c;可能初学者还是比较容易‘产出’的#xff0c;所以决定拎出来说说。 实例#xff1a; 可以看到#xff0c;这是一个用于新增修改前的一个名称检测是否重复的函数。 /*** 检测… 最近在重构些老项目发现了些比较典型的代码块。
想到这些常见的写法可能初学者还是比较容易‘产出’的所以决定拎出来说说。 实例 可以看到这是一个用于新增修改前的一个名称检测是否重复的函数。 /*** 检测标签名是否重复* param Id* param name* return*/Boolean checkLabelNameExist(Integer Id,String name);
因为糅合了新增和修改所以多了一个ID 入参作为判断是否为新增ID为空则为新增不为空则为修改。
那么对于新增来说 意是查出来这个 名称 的数据存在就是重复了。
而对于修改来说意是查出来这个 名称 的数据 需要排除本身还存在才算是重复了。 那么一起来看看 丑陋的产出 /*** 编辑或新增前 判断名称是否已存在* param id* param name* return true 为存在 false 为不存在*/Overridepublic Boolean checkLabelNameExist(Integer id, String name) {Label label labelService.queryOneByName(name);if (Objects.isNull(id)){if (Objects.isNull(label)){return false;}else {return true;}}else {if (Objects.isNull(label)){return false;}else {if (!label.getId().equals(id)){return true;}else {return false;}}}}
第一眼看到上面的代码 你是否会有些熟悉
是不是曾经或是现在依然还是在做类似的产出。 我们再来看看 使用 卫语句guard statement 方式后代码是怎么样的(是不是简洁了非常多) : Overridepublic Boolean checkLabelNameExist(Integer id, String name) {Label label labelService.queryOneByName(name);//查出来是空的代表肯定不存在if (Objects.isNull(label)){return false;}//如果是新增查询出来不为空则代表已存在if (Objects.isNull(id)){return true;}//若是编辑仅需要判断传入的ID 和查询出来的是否一致不一致则代表 存在return !label.getId().equals(id);} 一开始的流水账代码也是没问题的但是确实看着烦乱很多见步走步没有从更上一层角度去统筹梳理。 刚开始不熟悉使用卫语句的思路。没关系。
可以在写完之后对着代码自己再去一行行读。 找到guard条件 哪些条件是可以不需要嵌入到if 深层里面的可以提前拿出来判断的。 初学者可以多看看上面2个代码片段自己琢磨思考。 卫语句是通过对原条件进行逻辑分析将某些要害guard条件优先作判断从而简化程序的流程走向因此称为卫语句。