在工作过程中遇到大量的 IF 嵌套业务,当时的做法是不停的抽出方法来.... 但是抽方法 好烦啊,一个类里面一堆的方法,特别是起名字,太难了... 完犊子 我想了想,搞了这么一个东西,但是感觉可读性还是很差。希望各位大佬指点指点。 //链式只要出现一次false即中断 IFChain.newInstance() .ch ..

请教如何简化大量 IF

在工作过程中遇到大量的 IF 嵌套业务,当时的做法是不停的抽出方法来....
但是抽方法 好烦啊,一个类里面一堆的方法,特别是起名字,太难了... 完犊子
我想了想,搞了这么一个东西,但是感觉可读性还是很差。希望各位大佬指点指点。

        //链式只要出现一次false即中断
        IFChain.newInstance()
                .chainIf(1 == 1)
                .executeTrue(() -> {

                })
                .executeFalse(()->{
                    
                })
                .chainIf(2 == 2)
                .executeTrue(() -> {

                })
                .executeFalse(()->{
                    
                })
                .chainIf(3 == 3)
                .executeTrue(() -> {

                })
                .executeFalse(()->{
                    
                })
                .chainIf(4 == 4)
                .executeTrue(() -> {

                })
                .executeFalse(()->{
                    
                })
                .chainIf(5 == 5)
                .executeTrue(() -> {

                })
                .executeFalse(()->{
                    
                })
        ;

对标写法如下

        if (1 == 1) {

            if (2 == 2) {

                if (3 == 3) {

                    if (4 == 4) {

                        if (5 == 5) {

                        }
                    }

                }

            }
        }
打赏 20 积分后可见
20 积分 • 6 打赏
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2558 引用 • 7953 回帖 • 827 关注
17 回帖
请输入回帖内容...
  • 88250 1 1 赞同 1 评论

    我偏向于这样解决:

    while (true) {
        if (1 != 1) {
            break;
        }
    
        // 做 1 == 1 逻辑
    
        if (2 != 2) {
            break;
        }
    
        // 做 1 == 1 且 2 == 2 逻辑
    
       break;
    }
    

    可以加个 count 计数器,避免意外情况出现死循环。

    嗯 这种确实是可行
    pencilso
  • mymoshou 2 评论

    跟 swicth case 差不多的感觉

    1 回复
    switch 是平级的,跟这个不一样,这个是嵌套,嵌套和平级是不一样的
    pencilso
    @pencilso 那路或多
    mymoshou
  • Eddie

    欲言又止

  • hjljy

    我感觉确实不好优化 if

  • Eddie

    有点像责任链模式?

  • Blackman99

    JavaScript

    [
    	[1 === 1, () => { 
    		
    	}],
    	[2 === 2, () => {
    			
    	}]
    ].reduce((lastCondition, [condition, action]) => {
    	let boolVal = lastCondition && condition
    	if (boolVal ){
    		action()
    	}
    	return boolVal 
    }, true)
    
    2 操作
    Blackman99 在 2019-12-24 09:19:17 更新了该回帖
    Blackman99 在 2019-12-24 09:19:55 更新了该回帖
  • jianzh5

    大量的 if 一般使用策略者模式进行优化!

  • Lee981265

    写一个递归函数

  • hjljy

    一些简单的 if 可以用三目运算符。

  • ZephyrJung

    应该是责任链模式吧

  • Adrift001

    不用打赏我都知道, 用工厂。 之前看过。 但是我还是想给你打赏。

  • Adrift001 1 3 评论
    和我的需求不符
    pencilso
    需求是嵌套 if
    pencilso
    工厂模式 只适合平级 if 但是不适用嵌套 if
    pencilso
  • yvejohn

    这个打赏太亏了 😭

  • Adrift001 1 评论

    嗯,确实有点不符。 🙂

    感谢老铁的打赏
    pencilso
  • Angonger 2 评论

    嵌套 IF 一般考虑的是提前结束来减少嵌套层数

    但是 如果当你的 return 必须要写两行代码呢
    pencilso
    @pencilso 最好给我场景,不是几行代码的问题,我有说提前结束这种是解决什么问题的
    Angonger
  • poc9999

    不满足条件的可以提前 return

  • power721

    状态机?

请输入回帖内容 ...