Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重构函数中的早期返回?_Javascript - Fatal编程技术网

Javascript 如何重构函数中的早期返回?

Javascript 如何重构函数中的早期返回?,javascript,Javascript,这里的问题是,我有多个早期返回点,其中代码基本上是重复的 我想学习一种优化重构的方法,或者: 返回仅一次-或 不要重复返回未定义的零件 function fn(foo) { if (!foo) { return undefined; } const bar = some_calculations(foo) if (!bar) { return undefined; } const baz = some_calculations_with(bar, fo

这里的问题是,我有多个早期返回点,其中代码基本上是重复的

我想学习一种优化重构的方法,或者:

  • 返回
    仅一次-或
  • 不要重复返回未定义的
    零件

    function fn(foo) {
      if (!foo) {
        return undefined;
      }
    
      const bar = some_calculations(foo)
      if (!bar) {
        return undefined;
      }
    
      const baz = some_calculations_with(bar, foo)
      if (!baz) {
        return undefined;
      }
    
      return baz * 2
    }  
    

  • 我认为,就性能而言,您的代码经过了优化。此外,我认为它很容易阅读和理解。一个问题(正如评论中所指出的)就是它履行了太多的职责

    记住,考虑到你的参数

    • 仅返回一次
    • 不要重复返回未定义的
      零件
    …如果,则可以在
    中短路分配。完全没有
    返回
    返回未定义
    相同

    const some_计算=(foo)=>“bar”;
    用=(bar,foo)=>“baz”计算常数;
    功能fn(foo){
    如果(foo&(bar=some_计算(foo))&&(baz=some_计算(bar,foo)))
    返回baz;
    }
    设noResult=fn();
    控制台日志(noResult);
    让结果=fn(“foo”);
    
    控制台日志(结果)let
    ,有条件地分配它,然后在函数末尾返回它来避免多次返回。一个函数应该有一个单独的责任,而您的函数有三个。所谓优化——我的意思是重构,
    fn
    代码现在很难阅读,这不是我想要实现的。你的问题中没有提到可读性。您要求重构“
    return
    仅一次”和“不要重复
    returnundefined;
    部分”,我相信我的回答已经满足了这两个要求。如果你想要一个可读的版本,我建议你坚持现有版本。将来,如果你想要一个提供XYZ的答案,请确保你的问题要求XYZ。我不认为我必须明确地说明显而易见的事情。我对你的答案投了赞成票,但不能接受。