代码之家  ›  专栏  ›  技术社区  ›  Markive

函数链接取决于布尔结果

  •  2
  • Markive  · 技术社区  · 14 年前

    这只是一个效率问题。我有兴趣知道人们是否有一种更有效或更合理的方式来处理这种情况。

    在我的ASP.NET应用程序中,我正在运行一个脚本来生成一个新项目,顶层的代码如下所示:

    Dim ok As Boolean = True
        ok = createFolderStructure()
        If ok Then ok = createMDB()
        If ok Then ok = createProjectConfig()
        If ok Then ok = updateCompanyConfig()
    

    我创建了一个布尔值,每个函数都返回一个布尔值结果,这个链中的下一个函数只有在前一个函数成功时才会运行。我这样做是因为一个ASP.NET应用程序将继续运行整个页面生命周期,除非有一个未处理的异常,并且我不希望整个应用程序在链中出现问题(有大量文件的复制和删除等)时出错。在本例中)。

    我只是想知道其他人是如何处理这种情况的?vb.net单行if语句非常简洁,但我想知道是否有更好的方法?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Kobi    14 年前

    通常,函数不应返回 true / false 根据其结果,这被认为是过时的。这里的try/catch块更好,函数在出现错误时抛出异常。当然,也就是说,假设错误只在特殊情况下发生:

    Try
        createFolderStructure()
        createMDB()
        createProjectConfig()
        updateCompanyConfig()
        ''// ...
    Catch ioExeption as IOException
        ''// handle it
    End Try
    
        2
  •  2
  •   Lieven Keersmaekers    14 年前

    你可以把布尔值放在一起

    If createFolderStructure() Then
    If createMDB() Then
    If createProjectConfig() Then
    If updateCompanyConfig()
    

    但我必须同意,使用异常是处理这些情况的更好方法。

        3
  •  1
  •   Ozan HELPY    14 年前

    科比教你怎么做。如果您确实需要使用布尔函数的结果,那么可以使用 Andalso运算符 .

    Dim ok As Boolean
    ok = createFolderStructure() 
        AndAlso createMDB()
        AndAlso createProjectConfig()
        AndAlso updateCompanyConfig()
    

    这些表达式的计算比较慢,即如果一个函数返回false,则不计算表达式的其余部分。