1

だから私は次のような関数を持っています:

public void doSomeWork(List<Item> items){
    //modify the items
    return;
}

voidを返すのは良い設計ですか、それともリストを返すだけのほうがいいですか?

4

5 に答える 5

4

JDK自体を見てください。を返すメソッドが表示されますvoidか? (そうです。)

あなたの選択は、何が正しいか適切かという誤った考えとは関係ありません。副作用を許容するかどうかです。

そのメソッドは、次の 2 つの方法のいずれかで記述できます。

public void doSomeWork(List<Item> items){
    // You can't modify the items reference, but you can modify the List that it points to by adding or removing Items.
}

これには、渡されたリストを変更するという副作用があります。クライアントがそれを認識していない場合、不愉快な驚きになる可能性があります。

2 番目の方法は、List を渡して、変更されたバージョンを返すことを意味します。

public List<Item> doSomeWork(List<Item> items){
    List<Item> modified = new ArrayList<Item>(items);
    // modify the returned List
    return modified;
}

この方法でクライアントが驚くことはありません。渡されたリストは変更されないままです。より機能的なスタイルです。それも「流暢」です。ただし、新しいリストを割り当てるため、より多くのメモリが必要になります。

于 2013-01-10T01:50:24.583 に答える
1

もちろん。返すものがない場合、戻り値の型はvoidです。return;明示的なステートメントも必要ありません。実行を関数の底から落としてください。

public void doSomeWork(List<Item> items){
    //modify the items
}

問題は、意味のある戻り値があるかどうかに要約されます。しなくても全然いいです。

于 2013-01-10T01:43:33.150 に答える
1

何も返さないことが意味的に理にかなっている場合は、何も返さなくてもまったく問題ありません。

于 2013-01-10T01:44:14.600 に答える
0

メソッドが値を返す必要がない場合もあります。そのすべての作業は単純に内部で行われ、実際に外に出る必要はありません。

特にセッターやinit()メソッドなどの機能では、これは優れた設計手法です。これらはどちらも、何かを示すために呼び出した人に値を返す必要はありません。

于 2013-01-10T01:51:46.787 に答える
0

その無効であっても、ある時点でメソッドを終了する必要がある場合は、return; を使用できます。それ以外の場合は、そうする必要はありません。

public void doSomeWork(List<Item> items){
   if(some condition){
   return;
   }
    // Do my work
 }
于 2013-01-10T01:45:52.353 に答える