【问题标题】:Are deeply nested if statements considered good form? [closed]if 语句是否被认为是良好的形式? [关闭]
【发布时间】:2012-03-08 19:31:37
【问题描述】:

在我使用 Objective-C 和 Cocoa 编写 Mac 软件的过程中,我学到了很多东西。我还有很多东西要学,但在过去的几个月里我有了很大的进步,并且已经进步到可以编写中高复杂度的软件了。

我注意到,在这段时间里,出现在我的代码中的 if 语句(在较小程度上,每个语句的数量)显着增加。有时,我发现自己将 if 语句嵌套到最深的五个语句。

我自己并没有注意到这样做的任何缺点(除了在某些情况下降低了可读性),但是在编写 Objective-C 时,这是否被认为是可以接受的和好的形式?有没有比嵌套 if 语句更好/更有效的方法来完成任务?

【问题讨论】:

  • 这个问题显然会“征求意见、辩论和[和]争论”。它是如何获得支持的?
  • @Carl:有可能,但我真的无法想象有人会争论 for 箭头代码。这几乎是一个公认的准则。我更倾向于投票结束这个,因为“你可以在几十个编程博客中的任何一个中阅读到这个”,但这并不是一个真正接近的原因。

标签: objective-c cocoa coding-style


【解决方案1】:

深度嵌套的条件肯定不被认为是好的形式。它们是否真的很糟糕取决于您的观点,也许还取决于特定的代码。正如您所说,嵌套条件往往难以阅读,也往往难以理解和维护。

想象一下,如果我给你以下指令:

如果是星期一,如果我的账户里有超过 30 美元,如果我没有打领带,如果没有下雨,我希望你去给我买个芝士汉堡当午餐。但是如果下雨了,如果有酸菜,我会吃热狗,但如果没有酸菜,我就吃金枪鱼三明治。如果我打领带,除非有鲁本特色菜,否则我会吃沙拉,在这种情况下,我会吃沙拉。如果不是星期一,或者价格低于 30 美元但超过 12.50 美元,请给我买墨西哥卷饼,但前提是附近有一辆好的墨西哥卷饼卡车......

这实在是太复杂了,即使你把它写下来,也不能给某人并期望他们 100% 正确地做到这一点。如果你把它分解掉就更好了。例如,您可以为一周中的每一天在单独的页面上编写单独的说明。单独页面的代码等价物将是单独的函数或方法。简化一组复杂条件的另一种方法是使用查找表,其中列出了所有组合以及每个组合的期望结果。还有其他的可能...

主要是:不要编写难以理解的代码。无论您使用哪种语言,都可以使用大量工具来简化问题,因此请尽可能利用它们。

【讨论】:

    【解决方案2】:

    一般来说,将if 语句嵌套在 3-4 深度之外,需要进行不同的处理。有时这只是将条件组合到一个if 中的问题(尽管您也可以在这方面做得过火),有时只是创建一些程序等问题。

    通常,当您发现有很多 if 语句时,这表明您让主要的流程控制变量变得过于相关。如果您做出决定的主要变量尽可能合理地“正交”,那将是最好的。即,变量X 处于状态A 的事实并不能“预测”什么状态变量Y 将在很大程度上处于状态。 (当然,这个“规则”,就像编程中的大多数规则一样,是被打破的,实际上应该只用作概念设计的辅助。)

    【讨论】:

      【解决方案3】:

      有时,我喜欢像思考句子一样思考代码。当你有一个连续的句子时,有时最好的解决方案就是将大句子分成更小的连贯思想。

      类似地,如果语句太多,我会评估函数,看看你是否可以将它分解成更简洁、更小的步骤。

      我逐渐意识到的另一件事是字典在设计中的用处。不完全确定为什么需要这么多 if 语句,但是当有疑问时,字典过去一直帮助我。

      如果您想发布一个有许多“if”块的案例示例,也许它会帮助我们提供解决方案。

      【讨论】:

        猜你喜欢
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-22
        • 2011-09-01
        • 2018-07-03
        • 2023-03-16
        • 2012-11-25
        • 1970-01-01
        相关资源
        最近更新 更多