13/03/24 19:01:41.33
for文は配列専用
while文はList専用
と使い分けている
25:デフォルトの名無しさん
13/03/24 19:11:19.30
その使い分けの意図はよく解らない。
26:デフォルトの名無しさん
13/03/24 19:19:11.51
昔から配列操作といえばfor文だったから
初期化子が中にあるというのが
ただしfor(:)の場合は例外
27:デフォルトの名無しさん
13/03/24 19:20:50.20
反復回数が一定の処理ならfor文のほうがパッと見でソースが分かりやすい
反復子?って奴の変化が単調ならfor文、ループ内の処理次第で変わるならwhile
28:デフォルトの名無しさん
13/03/24 19:21:27.25
>>24
iteratorの糖衣構文はforでしか使えないよなぁ。
29:デフォルトの名無しさん
13/03/24 19:36:11.65
くだらんこといってないでruby勉強しろ
30:デフォルトの名無しさん
13/03/24 19:46:00.45
はいはいrubyruby
31:デフォルトの名無しさん
13/03/24 19:56:55.80
forを使った方が反復子のスコープが小さいというのはある。
Iretator<String> i = list.iterator();
while(i.hasNext()){...}
と
for(Iretator<String> i = list.iterator(); i.haxNext();) {...}
ではiのスコープがループの外に出ないのでforの方が良いという場合はある。
32:デフォルトの名無しさん
13/03/24 20:11:55.74
馬鹿には無理
33:デフォルトの名無しさん
13/03/24 20:47:35.57
>>31
java6からだっけ、foreach使えるようになったらイテレータとか使わなくなった
34:デフォルトの名無しさん
13/03/24 22:09:54.96
remove使う場合など反復子そのものに用事があるときはforの糖衣構文ではなく
whileとか使う必要がある。
35:デフォルトの名無しさん
13/03/24 22:44:52.40
ループ条件に定数式使っただけで警告をもりもり吐く
お節介な「品質向上システム」とかがあってだな・・・
36:デフォルトの名無しさん
13/03/24 23:36:08.36
>>31
独習JavaだかEssential Javaだかにそんなことが載っていたような気がする
37:デフォルトの名無しさん
13/03/25 02:01:09.61
Iteratorや糖衣構文のfor-eachは使うには便利だが、
自前で実装するとなると面倒臭い。
hasNext()でカーソル進めて、
next()でカーソルが指すオブジェクトを取得。
の方がずっと楽なのに、なんであんな仕様なんだ?
38:デフォルトの名無しさん
13/03/25 02:03:27.80
Iteratorパターンってもともとそういうもんでしょ
わざとクラスを分割しているんだと
39:デフォルトの名無しさん
13/03/25 02:09:55.64
ListIteratorつかって
List#get(nextIndex())
40:デフォルトの名無しさん
13/03/25 02:55:26.55
>>39
配列や線形リストのIteratorなら自作でも割と簡単。
hasNext()で次のデータがあるか調べる(内部状態は変化しない)、
next()でデータを返す+カーソルを進める(データを返しつつ、内部状態も変化させる、だがremove()のために返したデータは記憶しておく)
っていうJavaのIteratorの仕様だと、
例えば、親ディレクトリを指定して、サブディレクトリを含む全ファイルを1つずつ返すIterator
なんてのを作るのがクソ面倒臭いのよ。
41:デフォルトの名無しさん
13/03/25 06:44:21.10
あまり難しい話は禁止ね
やめなさい
42:デフォルトの名無しさん
13/03/25 08:33:44.98
>>40
そもそも、Genericsの仕様が難儀だからなあ
Genericsを意識しなかったら簡単につくたりして
43:デフォルトの名無しさん
13/03/25 09:05:16.73
ArrayListのlistiteratorかiteratorでremoveがunsupportedで驚いた覚えが。
LinkedListを使えば良かったけど。
44:デフォルトの名無しさん
13/03/25 13:53:11.13
>>40
commonsかどっかに、子Iteratorを連結するIterator実装があったよ