2010-12-08 11 views
1

私はこの問題に遭遇し、満足のいく答えが見つからないようです。 Javaで、次の行を考えてみましょう:メソッドの戻り値を使用する必要がないのはなぜですか?

ListBox.getValue(ListBox.getSelectedIndex())

getValue()メソッドは文字列を返しますが、私は

返された値が保存されている

String foo = ListBox.getValue(ListBox.getSelectedIndex())

としてそれを書いていません。

最初のケースのようにステートメントを書くことで、警告やエラーが発生しないのはなぜですか?

答えて

1

関数は戻り値と副作用を持つことができます。純粋主義者の中には、これが好きではない人もいますが、それはそうです。

副作用のみに興味があり、戻り値ではない場合は、どこにでも戻り値を格納する必要はありません。 (「副作用」は、関数呼び出しによって状態が変化する)。

ガベージコレクションされたJavaのような言語では、返されたStringは、クリーンアップが実際に起こるときには確定的ではありませんが、すぐにガーベジコレクション可能です。 C++では、オブジェクトを "一時的な"(std :: stringのような)オブジェクトとして返すと、呼び出しの直後にオブジェクトが削除されます(参照の寿命に保持されるconst参照にバインドすることはできますが、参照がオブジェクトの存続期間を長くすることができる稀な例外です)。

+0

ohk、それはなぜ機能的言語の背後にあるすべての大騒ぎと誇大宣伝です。 – theTuxRacer

3

戻り値は、変数に割り当てられていないため、 "lost"です。

時には、副作用のために関数を呼び出すだけで、戻り値には関心がないため、警告は表示されません。

1

その特定のコードを調べる:私は、Java GUIのに慣れていないんだけど、リストボックスには、それはのようなセンチネル値を返します。その場合に選択されたインデックスを持たない可能性があることを想像

ListBox.getValue(ListBox.getSelectedIndex()) 

を - 1。 ListBox.getValue(-1)を呼び出すと、何が起こりますか?野生の推測:例外をスローする可能性があります。だから、おそらくこのコードは、「選択肢がリストボックスに作成されていない場合は例外をとります(別の場所でそれをキャッチしたい)」と効果的に言っています。

関連する問題