人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javaで二重ループかきますか?

もちろん、かけますが、二重ループは、可読性を下げると思います。

可読性の高いコードをかくためには、二重ループのネストしているループを別メソッドにわけ、そのメソッド名にループの目的にそったメソッド名をつけ、外だししたメソッドの戻り値に、そのループで欲しかった値を戻せば、二重ループでも可読性を下げないと思います。

職場で、話題になりましたが、結構みんな二重ループを多用してました。

皆さんは、二重ループつかってますか?

可読性を下げないために、二重ループを私みたいにつかわない人はいますか?

●質問者: kakakakabubububutoto
●カテゴリ:人生相談
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3

書くか、書かないか、だけを問われれば、「書く」と答えます。

二重ループを書くかどうか、というのは、結果であって、そもそものところは、
メソッドの振る舞いを決まるときに、ループを意識させるかどうか、なのだと思います。
言い換えれば、クラス設計に、どれだけ心血を注いでいるかの、結果だと。

二重ループが適切なのかどうかは、内側のループだけに着目すれば良いと思います。
というか、そのループは必要なのか、という観点です。

例えば、極端な例として、複数のものからひとつを見つけて、何かをする場合。

 List list = target.getList(...);
 Iterator i = list.iterator();
 while (i.hasNext()) {
 Item item = i.next();
 if (item ...) {
 ...
 break;
 }
 }

なのか、

 Item item = target.findItem(...);
 if (list != null) {
 ...
 }

なのか。
target が複数あると、最初に書いた方は、二重ループになっちゃいますよね。

じゃあ、二重ループは駄目なのか、って話ですけど、探索方向が一次元に収まらなければ、多重ループになるのは必然です。
例えば、画像のビットマップがあって、特定のピクセルを探して処理するような場合には、横と縦の二重ループになるのは、当然ですよね。

 for (y = 0; y < image.sizeY() ; ++y) {
 for (x = 0; x < image.sizeX() ; ++x) {
 ...
 }
 }
}

教条的に、二重ループを嫌って、横方向の1ラインの探索を、別のメソッドに隠蔽するのは、ちょっとやり過ぎな感じがします。

 for (y = 0; y < image.sizeY() ; ++y) {
 image.searchLine(...);
 }
}
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ