Effective Java 第8章 プログラミング一般 (45, 46)

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)

独習Javaが退屈でいい加減飽き飽きしてきたのでEffective Javaに移っちゃいます。こっちはEffective C++と同じく面白そう。ちゃんと読んでないけど。


2章から読み始めようと思ったけれど、レベル毎に進んでいくという感じではなくて、種類で分けられているので、最初に読み始めるのは「プログラミング一般」の8章から。

項目45

ローカル変数のスコープは最小限に、という項目。簡単じゃん、と思ったら実はイテレータだけ出来てなかった。

Iterator i = a.iterator();
while (i.hasNext()) { ... i.next(); ... }

こういう書き方よりも、

for (Iteartor i = a.iterator(); i.hasNext();) { ... i.next(); ... }

この方がスコープが狭いでしょ?とのこと。確かにー。今まで上の書き方だったなー。
でもまあ、これは1.5より前のコードの場合で、1.5以降なら拡張for文使いましょうとのこと。

項目46

でもやっぱり拡張for文が使えるなら使いましょう、という項目。

for (String str1 : strList1) { for (String str2 : strList2) { println(str1 + " : " + str2) } }

と同じ感じで

for (Iterator i1 = a1.iterator(); i1.hasNext(); )
{
  for (Iterator i2 = a2.iterator(); i2.hasNext(); )
  {
    println((String)i1.next() + " : " + (String)i2.next());
  }
}

と書くと結果が変わるので気をつけましょう、とのこと。確かに、もしかすると間違える気がしないでも無い……

while文でのイテレータ < for文でのイテレータ < 拡張for文でのイテレータ

出来るならこんな感じに。まあ、拡張for文使えれば必ずそれ使うだろうし。
項目45を読んだからにはwhile文でのイテレータはもう書かないだろうし。


今回はここで終わり。Tips集みたいな感じで読んでて面白い本だなー。