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

发布于 2022-08-27 12:05:43 字数 426 浏览 15 评论 0

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的代码行数不多,没什么意义,我也会把它拿到分支体外面,这样固然减少了代码量,但是破坏了代码之前的逻辑性。我写的代码不多,当分支复杂度较大的时候常常出错, 不知道各位是怎么处理的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

囚我心虐我身 2022-09-03 12:05:43

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

请别遗忘我 2022-09-03 12:05:43

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

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

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

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

可以使用命令模式。

指尖上得阳光 2022-09-03 12:05:43

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

洒一地阳光 2022-09-03 12:05:43

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

怀念你的温柔 2022-09-03 12:05:43

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

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

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

酒儿 2022-09-03 12:05:43

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文