だから私は次のような関数を持っています:
public void doSomeWork(List<Item> items){
//modify the items
return;
}
voidを返すのは良い設計ですか、それともリストを返すだけのほうがいいですか?
だから私は次のような関数を持っています:
public void doSomeWork(List<Item> items){
//modify the items
return;
}
voidを返すのは良い設計ですか、それともリストを返すだけのほうがいいですか?
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;
}
この方法でクライアントが驚くことはありません。渡されたリストは変更されないままです。より機能的なスタイルです。それも「流暢」です。ただし、新しいリストを割り当てるため、より多くのメモリが必要になります。
もちろん。返すものがない場合、戻り値の型はvoid
です。return;
明示的なステートメントも必要ありません。実行を関数の底から落としてください。
public void doSomeWork(List<Item> items){
//modify the items
}
問題は、意味のある戻り値があるかどうかに要約されます。しなくても全然いいです。
何も返さないことが意味的に理にかなっている場合は、何も返さなくてもまったく問題ありません。
メソッドが値を返す必要がない場合もあります。そのすべての作業は単純に内部で行われ、実際に外に出る必要はありません。
特にセッターやinit()
メソッドなどの機能では、これは優れた設計手法です。これらはどちらも、何かを示すために呼び出した人に値を返す必要はありません。
その無効であっても、ある時点でメソッドを終了する必要がある場合は、return; を使用できます。それ以外の場合は、そうする必要はありません。
public void doSomeWork(List<Item> items){
if(some condition){
return;
}
// Do my work
}