-2

コーディング スタイルに関する質問があります。以下に示す 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

どちらも目的が違います。それらはお互いの代わりではありません。

最初のものはメソッドから出てきます

2 つ目は、ループの NOT メソッドから出てきます。

for ループの後に SomeObj を操作するコードがある場合、最初のメソッドと 2 番目のメソッドで結果が異なるとします。

于 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 に答える