2012-03-08 61 views
2

在我用Objective-C和Cocoa编写Mac软件的冒险中,我学到了很多东西。对我来说还有很多需要学习的东西,但是在过去的几个月里我已经有了很大的提高,并且已经发展到具有中高复杂度的编程软件。如果陈述被认为是好的形式,是深嵌套的吗?

的东西,我已经注意到的是,在这段时间里,if语句(以及在较小程度上,每个语句),在我的代码出现急剧增加的数量。有时候,我发现自己嵌套,如果陈述深入到五个陈述。

写Objective-C的时候,我没有发现任何缺点这个我(除了在某些情况下降低可读性),但是这是可以接受的和良好的形式?有没有比嵌套的if语句更好/更有效的方式来完成任务?

+3

http://www.codinghorror.com/blog/2006/01/flattening-arrow-code.html – Mat 2012-03-08 19:33:05

+0

这个问题显然会“征求意见,辩论,[和]论点”。它是如何得到upvote? – 2012-03-08 19:43:23

+0

@Carl:除了我无法真正想象任何人争论_for_箭头代码。这几乎是一个可接受的指导方针。我更倾向于投票结束,因为“你可以在任何几十个编程博客中阅读这篇文章”,但这不是一个真正的理由。 – 2012-03-08 19:58:59

回答

9

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

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

如果今天是星期一,如果有在我的帐户是大于$ 30,如果我不打领带,如果它不下雨了,我想你去吃午餐时给我一个芝士汉堡。但是如果下雨了,如果酸菜可用,我会有一个热狗,但如果没有酸菜,我只需要一个金枪鱼三明治。如果我穿着领带,除非有特殊的reuben特色,否则我会有沙拉,在这种情况下,我会换上沙拉。如果不是星期一,或者价格低于30美元但超过12.50美元,请给我炸玉米饼,但前提是好的塔科卡车在附近......

这只是一种太复杂的指令,要给某人并期望他们即使你把它写下来,100%的时间也是正确的。如果你把它分解,它会更好。例如,您可以在单独的页面上为每周的每一天编写单独的说明。相当于单独页面的代码将是单独的函数或方法。另一种简化一组复杂条件的方法是使用一个查找表,列出所有组合以及每个组合的期望结果。还有其他的可能性...

最主要的是:不写代码很难理解。无论您使用何种语言,都会有大量工具可用于简化问题,因此尽量利用这些工具来提供您所知道的信息。

1

一般来说,嵌套if报表超出了不同的治疗3-4个深乞求。有时候这只是一个结合条件的问题if(尽管你也可能会过度),有时候也是创建一些程序的问题等。

通常,当您发现有很多if语句时,它表明你已经让你的主要流量控制变量太相关了。如果您做出决策的主要变量尽可能合理地“正交”,那么最好。也就是说,事实上,可变X处于状态A不“预测” Y会是什么状态变量中任何较大程度。 (当然,这个“规定”,最喜欢的节目,是用来被打破的,并且确实应该只能作为一个概念性的辅助设计)

1

有时候,我喜欢用同样的方式去思考的代码我想到了一个句子。当你在判决中运行时,有时候最好的解决方案就是将大句子分成更小的连贯思想。

同样,如果if语句太多,我会评估函数,看看您是否可以将它分解为更简洁,更小的步骤。

我渐渐意识到的另一件事是词典在设计中的用处。不完全确定为什么你需要这么多的陈述,但是如果有疑问的话,字典在过去总是帮助我。

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