【问题标题】:Exit loop coding style [closed]退出循环编码风格[关闭]
【发布时间】:2012-12-02 05:07:49
【问题描述】:

我有一个编码风格问题。下面是两个循环函数,它们做同样的事情,但循环退出技术略有不同。我只是想了解你们喜欢什么。

我个人更喜欢第一个。我不明白为什么当我知道没有其他事情可做时,我应该声明一个新变量并打破循环。

private SomeObj getSomeObj(ArrayList<SomeObj> items, String type)
{
    for (SomeObj someObj : items) {
        if ( someObj.getField().equals(type) ) {
            return someObj;
        }
    }

    return null;
}


private SomeObj getSomeObj(ArrayList<SomeObj> items, String type)
{
    SomeObj found = null
    for (SomeObj someObj : items) {
        if ( someObj.getField().equals(type) ) {
            found = someObj;
                    break;
        }
    }

    return found;
}

【问题讨论】:

  • 这种问题在stackoverflow中是不受欢迎的,你应该在programmers.stackexchange.com问它
  • 不应该在这里问讨论类型的问题。

标签: c# java coding-style


【解决方案1】:

两者都有不同的目的。它们不能相互替代。

第一个来自方法

第二个来自循环NOT方法。

如果有一些代码在 for 循环之后操作 SomeObj,那么结果会因第一种方法和第二种方法不同。

【讨论】:

    【解决方案2】:

    我更喜欢第一个。一般来说,我更喜欢提前退出方法,因为它往往会减少嵌套。

    【讨论】:

      【解决方案3】:

      这两种方法不能在任何情况下都相互替代。假设您想在循环完成后执行代码,然后 return 无法为您执行此操作,反之亦然。在您的情况下,两者都可以使用,但并非在所有情况下都可以使用。

      for 循环之后的语句,你不想执行的语句被 break 执行

      private SomeObj getSomeObj(ArrayList<SomeObj> items, String type)
      {
          SomeObj found = null
          for (SomeObj someObj : items) {
              if ( someObj.getField().equals(type) ) {
                  found = someObj;
                          break;
              }
          }
          //Statements you do not want to execute get executed with break  
      
          return found;
      }
      

      for 循环之后的语句,你想要执行的语句不会被 return 执行

      private SomeObj getSomeObj(ArrayList<SomeObj> items, String type)
      {
          SomeObj found = null
          for (SomeObj someObj : items) {
              if ( someObj.getField().equals(type) ) {
                  found = someObj;
                          return;
              }
          }
          //Statements you want to execute do not get executed with return
      
          return found;
      }
      

      【讨论】:

      • 您可以声明许多不同的可能场景,但这并不能回答问题。
      • 请停止将散文的随机块放置在代码块中!
      • 你是要代码中的cmets吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多