首页 > 关于if···else中共有代码

关于if···else中共有代码

if···else中常常有这样的代码结构

if condition1:
    A
    B
    C
else if condition2:
    A
    B2
    C
else:
    B3
    C

C就是他们的共有代码,有时候C的意义比较明确,代码量比较多,本着代码量最小的考虑,我们会把它拿出来:

if condition1:
    A
    B
else if condition2:
    A
    B2
else:
    B3
C

但是实际编程的时候,我有时候会有强迫症,即便C的代码行数不多,没什么意义,我也会把它拿到分支体外面,这样固然减少了代码量,但是破坏了代码之前的逻辑性。我写的代码不多,当分支复杂度较大的时候常常出错, 不知道各位是怎么处理的?


我感觉这种情况下 C 出现在外面比较正常,把 C 放到分支里面才是不能容忍的事,可能我也有强迫症吧,呵呵。

另外,既然 C 在所有分支下都会被执行,那么即使它出现在外面,在逻辑上应该也说得通啊

碰到逻辑复杂的代码,我自己一般是这样做:

  1. 拿一张纸
  2. 把所有可能出现的情况都列出来
  3. 把每种情况下应该做什么样的事写在它的旁边
  4. 整理出它们之间的从属关系,尽可能将其简化,然后写一段伪代码
  5. 把每种情况代入进去,看是否符合预期
  6. 把伪代码转换成实际代码

既然用到C的地方这么多,为什么不把C独立成一个函数呢?


可以使用命令模式。


在Objective-C中我一般的做法是写个Block,如果代码量大的话就封装成一个函数。


如果把 C 做成一个宏,然后在 if ... else 结束的时候 #undef 呢?


没必要,顺气自然是最好的。

有可能随着业务的变迁,你不能保证共同语句C是在所有分支的最后一句或者第一句。 如果在其中某个分支是在中间。而且后面的代码会影响C语句的相关内容。

例如C语句里面有修改局部变量等操作。某个分支后面的语句也进行了修改,那么这种情况可能会导致某些难以发现的BUG.


很显然被采纳的这个答案并不理想 如果if-else 结构在一个函数体内,就是完整的逻辑,c确实在三种情况都要用到,但是因此拿出新建立一个函数就很好? 如果c的逻辑本身很简单呢? 果断匿名函数吧。 我们需要更有启发性的答案

【热门文章】
【热门文章】