if从入门到出轨(java版本)
为什么会产生很多if分支
在我们的日常生活中,会遇到很多判断逻辑,屁如,如果你在2月14号,心情很好,那么就给女朋友买了个iPhone 14 Pro Max 1TB 银白色,如果你女朋友在2月14号没有收到您老人家的礼物,那么你可能睡沙发或者轨搓衣板,或者直接和其他帅哥好上了,亦或者直接给你抛个异常,带个绿帽表示表示.放在业务代码中,屁如,如果用户是普通员工,应该展示上面列表或者按钮,如果是超管又应该展示上面列表或者按钮.生活中业务中客观存在的逻辑,自然就会产生if分支,当然最终经过转换,都会走到0和1,就是数字电路中的高低电平,我们就不扯远了,简言之就是,if逻辑客观存在,所以写代码的时候始终要写这些逻辑,只是展现形式不一样罢了.
if分支是什么
学习一门新的语言往往是先学语法,比如像学如何定义变量,一些运算符,了解相关数据类型(什么类,对象,接口,枚举等杂七杂八的),和条件语句(if,switch case ),常用数据结构(map,集合,链表,树等),控制流程语句啊(for循环,迭代器,do while什么的),以及其他特性(反射,注解,线程等),我们写的业务代码,if条件语句几乎到处都是,并且看起来不太美观,审美疲劳,简言之,它好像什么都不是,但是又却不了.
常见解决if分支方案和if分支抽象模型
我们看其他老铁的代码时发现,人家喜欢用设计模式去优化,屁如策略模式,工厂模式和模板方法等,或者三木运算,或者JDK8的optional或者加强版(hutool的opt工具类,包含JDK16的新增方法)if数量太大的往往用map映射甚至数据库表配置等方案,感觉挺好的,这个是大多数老铁爱干的,然而一顿操作下来,难免还是有if 分支散布在不同的模式内部或者其他卡卡各各,所以我们为了让前面的方案再少一些if分支,参考函数式编程的理念(给参数执行操作),重新给if 分支抽象了一个分支模型出来
if (布尔值或者异常){
// 执行相关函数(业务逻辑,赋值,请求三方接口,打印日志,操作缓存或者数据库等等
// 或者返回一个值
// 发生或抛异常(比如老生常谈的空指针)
}
if分支常见代码和改造示例
案例1
去if后
去掉if并使用方法应用
案例2
去掉if后
案例3
去掉if后
由于Kif和Hif是一个工具接口(由函数完成,不含有类方法的调用),其中和hutool的Opt类(暂时还缺少点方法)搭配使用更佳,90%以上的if条件语句是可以改造的,那剩下的目前感觉是java语法受限,暂时只能用原生if(如果有,记得告诉贤弟,3Q)
关于optional不足(只能判空,map传递对象不能操作原来的对象)在hutool的Opt类的到了一些解决,但是它需要传递一个对象,对于不需要传递的操作,暂时没有完全处理,也就是没有把if 的逻辑在里面一并处理,后面如果有,那么这个博客会更新(贤弟空了看能不能提个PR加进去,后面再说吧)
https://gitee.com/dromara/hutool/pulls/426