【问题标题】:How to reduce the nesting of these if-conditionals?如何减少这些 if 条件的嵌套?
【发布时间】:2012-05-13 08:40:48
【问题描述】:

我有一个小问题 :D 我找不到合适的搜索词,所以我写了这个问题。 我怎么变短?我知道这个逻辑||但是我怎么能在一行中添加超过 1 个呢? 感谢时间 最好的祝福 约翰

    bool b = [self NSStringContains:convert contains:@"Input"];
    if (b ==true)
    {
           bool b = [self NSStringContains:convert contains:@"Output"]; 
           if (b ==true)
           {
                     bool b = [self NSStringContains:convert contains:@"statecheck"]; 
                     if (b ==true)
                     {
                     ....
                     }
           }
     }

【问题讨论】:

  • NSStringContains:contains: 是什么东西?这是一个糟糕的方法名称;为什么不直接使用现有的字符串方法?

标签: objective-c logic conditional


【解决方案1】:

在这种情况下,你似乎需要&&

if ([self NSStringContains:convert contains:@"Input"] &&
    [self NSStringContains:convert contains:@"Output"] &&
    [self NSStringContains:convert contains:@"statecheck"])
{
   ...
}

对于它的价值,鉴于bool b;if (b==true) 总是多余的——只需使用if (b)

【讨论】:

  • 当这 3 个语句中只有一个条件必须正确进入时,我如何编码?
  • @John:我不太确定你在问什么。你的意思是你想要像if (..."Input") xxx else if (..."Output) yyy else if (..."statecheck") zzz; 这样的东西?
【解决方案2】:

大概是这样的:

bool hasInput = [self NSStringContains:convert contains:@"Input"];
bool hasOutput = [self NSStringContains:convert contains:@"Output"];
bool hasStatecheck = [self NSStringContains:convert contains:@"statecheck"];
if (hasInput && hasOutput && hasStatecheck)
{
}

你使用的是,“如果这个条件,然后检查这个条件,这个条件”等等。你可以用逻辑与将它们放在一起,用&&表示。

【讨论】:

  • 这不是在浪费步骤吗?如果第一个是假的,你不需要检查下一个案例。当第一个条件在 (x && y && z) 中失败时,其余的将不会被检查并保存两个操作步骤
  • @D3mon-1stVFW 确实如此,在需要这种性能的情况下,Jerry 的解决方案会更好。我会先编写可读的代码。
  • 没错。我以前会这样写,在不寻常的情况下,这被证明是性能瓶颈,重写没有变量。
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 2018-08-28
  • 2012-01-16
  • 1970-01-01
相关资源
最近更新 更多