【C#】优化你的 else if 语句,告别屎山
本文最后更新于:几秒前
前言
相信大家在开发过程中,一定用过 else if 语句吧。可别小瞧这玩意儿,如果你的逻辑不是最优的话,就不能写一个最最完美的 else if 了。比如说我就是,虽然逻辑上合理,但在编译器看来还是屎山依托。也就是说我们想的只是满足正常运行的最低要求,仍然需要对他们进行优化。
下面就以我在项目中遇到的案例来给大家讲解。
前置知识
如果你和我一样思维不灵活,或者说没理解 if else 的精髓的话,一定要来看看这个前置知识,才能优化 else if。不瞒你说,以下内容都是我刚悟出的,像极了在高中学习数学的我。
先来看看基本的 if else:
1 |
|
没毛病吧,是不是很常见且简单。但有一个非常重要的地方一定要注意,这里的 else 分支里面隐式包含了 a == false 的条件 (我好像说了个寂寞),我们都能理解,但有时还是忍不住地怎么想就怎么写。当我们在 else 里面再次用上 if 的时候,一定有人 (比如说我),结构就乱了。于是,就有了我们的第一种比较常见的场景:
冗余条件判断
先来看看代码
1 |
|
有没有看到冗余的地方?
没戳!第二个分支里的 !a 可以省略!我们刚说过了,这里隐式包含了 a == false 的情况,即 !a。于是可以这样:
1 |
|
怎么样,是不是感觉格局被打开了?
单一条件优先
第二种场景应该也比较常见:
1 |
|
有没有发现我们重复判断了 a?
于是我们可以优先判断 !a,剩下的不就都是 a 了吗:
1 |
|
异或型条件判断
这个可谓是屎中屎了,或许没有那么常见,如果你也写过的话,那就有必要看看了:
1 |
|
或者说跟它一样,但是更屎的写法:
1 |
|
先说一下什么是异或 (XOR)?
当且仅当参与运算的两个布尔值中恰好有一个为 true 时结果为 true,否则为 false。
在上述代码中,也就是在判断当 a 和 b 恰好有一个为真的情况,于是我们可以这样优化:
1 |
|
这里的 a ^ b 就是在做 XOR 运算,因为当这个语句为 true 时,必定表示 a 和 b 恰有一个为 true,于是我们甚至可以直接写为 a != b 更易懂,两者都是同样的原理。接着再继续判断究竟是哪一个为 true 就行了。
总结
我遇到的也只有这些,如果还有的话,我会在此进行更新。先来总结一下要点
- 注意隐式包含的条件:判断了 a 之后剩余分支都包含了 !a 的条件,不必重复书写
- 注意优先判断某条件:当你发现多个分支重复判断了 a 时且只有一个需要 !a 的分支,那么可以考虑将 !a 提前,剩余的就都是 a 了,减少重复。
- 注意异或型条件判断:少见,但不容忽视。