-2

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

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

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;
}
4

3 回答 3

1

两者都有不同的目的。它们不是彼此的替代品。

第一个来自方法

第二个来自循环 NOT 方法。

让我们说,如果在 for 循环之后有一些代码操作 SomeObj,那么结果会因第一种方法和第二种方法而异。

于 2012-12-02T05:09:13.787 回答
0

两种方法不能在每种情况下都相互替代。假设您想在循环完成后执行代码,然后 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;
}
于 2012-12-02T05:10:03.363 回答
0

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

于 2012-12-02T05:10:26.340 回答