【问题标题】:Returning false for a if / else check为 if / else 检查返回 false
【发布时间】:2014-07-17 23:13:36
【问题描述】:

有时您需要检查是否设置了某些内容,然后执行操作。有时有很多这样的检查,我讨厌导致的压痕。

为了尽量减少嵌套,我总是检查相反的和return,然后继续相同的缩进。

比如下面这样说

if (user.isOwner)
{
    // Do some operation
    // Set a value $accepted to true or false

    if ($accepted)
    {
        // Do more operation
        // And so on
    }
}

相反,我把上面的代码写成

if ( ! user.isOwner) return;

// Do some operation
// Set a value $accepted to true or false

if ( ! $accepted) return;

// Do more operation
// And so on

这会导致任何问题吗?上面的函数在调用时不会返回任何结果(即我调用的是doThisForMe())。我在这里的编码是用 PHP 和 Javascript 完成的。我不知道这个问题是否与语言有关。

【问题讨论】:

  • 这里没问题,你也可以return True 或任何你想要的值。但当然,函数内部的任何内容都会被“跳过”。只要语言允许函数有多个退出点,这与语言无关。
  • javascript 是客户端,请记住这一点 - 如果您的 javascript 旨在确保安全(例如,如果该人是所有者),只需知道它不会做任何可以做的事情'不要被开发技能最低的人绕过。
  • @OllieFord,好的,太好了!很高兴知道它不会造成任何问题。
  • @skrilled,好点子!根本没想过这个!
  • 这看起来可以使用 Option/Maybe 模式进行抽象。这样您就可以使用组合,而不是过程代码。

标签: javascript php if-statement


【解决方案1】:

if-elseif-else 语句一旦发现一个为真,就会停止进行比较。 if-if-if 进行所有比较。第一个效率更高。

在您的情况下,或者在控制权离开方法的情况下(异常),执行多个 if 语句和执行 if-elseif-else 语句之间没有区别。

不过,最好还是使用if-elseif-else。假设您更改了代码,这样您就不会在每个 if 块中执行 return。然后,为了保持效率,您还必须更改为 if-elseif-else 成语。从一开始就设置为 if-elseif-else 可以节省您以后的编辑工作,并且让阅读您的代码的人更清楚。

如今编写程序并不是一项大任务,而代码的可维护性是主要要求。由于不断变化的世界和那里的要求,我们需要不时更新或更改代码。因此,为了更好的可读性,非常需要缩进代码。

【讨论】:

    【解决方案2】:

    只要您不想退货,我觉得这很好。 否则你可以使用单线 if。

    return (<statemen>) ? <handles true> : <handles false>;
    

    我不确定它是否也适用于 PHP,但它肯定适用于 javascript。

    【讨论】:

    • 顺便说一下,&lt;statement&gt; 周围的 () 不是必需的。
    【解决方案3】:

    当您尝试最小化脚本文件中的缩进时,这通常非常有用。一般没有问题。

    唯一可能出现的问题是如果你想在你的函数中添加一个else 块。使用前一种语法,只需将else 添加到它的末尾即可。如果你改用return,那是不可能的,你必须把它转换成以前的语法。

    这适用于 PHP 和 JavaScript。它也适用于大多数具有类似语法的语言。

    【讨论】:

      【解决方案4】:

      在 Javascript 的情况下,这应该没有任何害处,因为无论哪种方式,javascript 函数都会返回 undefined。 (你写 return; 与否)

      对于 PHP 我不太确定,但我现在无法想象有任何问题。

      但是我认为这是不好的做法,因为缩进有助于了解发生了什么。 如果你在一个函数中有很多这样的检查,也许你应该考虑创建更多、更小的函数而不是一个大函数,因为这也有助于阅读你的代码。

      【讨论】:

        猜你喜欢
        • 2016-11-14
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        • 1970-01-01
        • 2022-07-12
        • 2021-05-30
        相关资源
        最近更新 更多