【问题标题】:Returning early from a function in classic ASP从经典 ASP 中的函数提前返回
【发布时间】:2010-02-04 15:58:01
【问题描述】:

有没有办法从经典 ASP 中的函数提前返回,而不是运行完整的函数长度?例如,假设我有这个功能......

Function MyFunc(str)
  if (str = "ReturnNow!") then
    Response.Write("What up!")       
  else
    Response.Write("Made it to the end")     
  end if
End Function

我可以这样写吗...

Function MyFunc(str)
  if (str = "ReturnNow!") then
    Response.Write("What up!")       
    return
  end if

  Response.Write("Made it to the end")     
End Function

请注意我在经典 ASP 中当然不能执行的 return 语句。有没有办法在返回语句所在的位置中断代码执行?

【问题讨论】:

    标签: asp-classic


    【解决方案1】:

    是的,使用exit function

    Function MyFunc(str)
      if str = "ReturnNow!" then
        Response.Write("What up!")       
        Exit Function
      end if
    
      Response.Write("Made it to the end")     
    End Function
    

    我通常在从函数返回值时使用它。

    Function usefulFunc(str)
       ''# Validate Input
       If str = "" Then
          usefulFunc = ""
          Exit Function
       End If 
    
       ''# Real function 
       ''# ...
    End Function
    

    【讨论】:

      【解决方案2】:

      使用经典 ASP,您需要使用Exit Function

      Function MyFunc(str)
        if (str = "ReturnNow!") then
          Response.Write("What up!")       
          Exit Function
        end if
      
        Response.Write("Made it to the end")     
      End Function
      

      【讨论】:

        【解决方案3】:

        正如已经指出的那样,您可以使用Exit Function,但您应该谨慎使用。在您提供的简单示例中,确实没有其他代码会执行任何优势 无论如何。

        在一大段代码中放置退出点会使跟踪和调试变得困难。更严重的是,它会导致代码的后续更改变得更加困难,需要更广泛的更改,从而增加风险。因此,这种模式应该被认为是一种“难闻的气味”。

        一个可以合理接受的典型场景是代码可能会在继续执行代码主体之前对其输入参数进行一些断言。除此之外,您应该能够表达一个非常非常好的理由。

        您可能会说“如果我这样做,我将拥有更多 If 结构并过度增加代码中的标识”。如果是这样,那么该函数无论如何都有太多代码,应该重构为更小的函数。

        【讨论】:

        • 安东尼的一些优点。这绝对是一个非常简单的例子,我用它只是为了找出正确的语法是什么。如果你不使用“exit”,我确实要提到你关于拥有更多“if”结构和增加缩进的最后一点。我个人认为这是编程中的“宗教战争”问题,更多的是个人喜好问题。不管你的反馈很好,所以谢谢你。
        • @Rob:我将“宗教”问题定义为选择一方或另一方对结果影响很小或没有影响的问题。另一方面,最佳实践是关于选择一方或另一方会显着影响最终结果的问题。作为一般规则(记住没有绝对的规则),任何可识别的代码块都有一个入口点和一个出口点是“最佳实践”。函数、if 语句、循环等都是如此。Exit Function 是一个有用的工具,当发现“最佳实践”的合理例外时。
        • 确实,为函数设置一个入口和出口点当然是有意义的,我同意这是一个很好的做法。我使用“退出函数”调用的主要原因是您已经提到的一点,它正在执行各种断言和/或验证。
        • 我知道我迟到了 7 年,但在其他语言中输入 return "What's up" 无论如何都会退出函数...我来到这里是因为我想在函数中返回 false,但其余代码正在执行并破坏结构。我完全同意出口点不好,但在这种情况下它们是正常的代码。 Return 退出函数,因此正确调用了 Exit function。另一方面,goto...
        • 也晚了,但可能有理由这样做:例如,一个基于多个条件返回真/假的函数,如果其中一个条件的评估成本很高,则值得构建函数提前进行廉价测试,如果为假,则提前返回,然后只有在廉价测试为真时才继续进行更昂贵的检查。
        猜你喜欢
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        相关资源
        最近更新 更多