社内発表2


答えは、Statementのクローズで例外が発生するケースがあることです。
Statementのクローズで例外が発生すると、このままでは
Connectionのクローズが実行されません。

対策としては、javaで言うと、java6までのレガシーシステムの古い流儀では
finally句等を使用して、トランザクションの最後に必ずclose処理が走る様にすることです。

```java
package com.example.cf.flightsearch;
…
public class FlightSearch implements SessionBean {
  private MonitoredDataSource connectionPool;
  private List lookupByCity(…) throws SQLException RemoteException {
    Connection conn = null;
    Statement stmt = null;
    try {
      conn = connectionPool.getConnection();
      stmt = conn.createStatement();
      // 検索のロジックを実行して、
      // 結果のリストを返す
    } finally {
      if (stmt != null) {
        try {
          stmt.close();
        } catch (Exception e){
            //NO OPARATION(復帰の可能性は無い)
        }
      }
      if (conn != null) {
        conn.close();
      }
    }
  }
}
```
或いは、DbUtilsを使用して

```java
package com.example.cf.flightsearch;
…
public class FlightSearch implements SessionBean {
  private MonitoredDataSource connectionPool;
  private List lookupByCity(…) throws SQLException RemoteException {
    Connection conn = null;
    Statement stmt = null;
    try {
      conn = connectionPool.getConnection();
      stmt = conn.createStatement();
      // 検索のロジックを実行して、
      // 結果のリストを返す
    } finally {
      DbUtils.closeQuietly(stmt);
      DbUtils.closeQuietly(con);
    }
  }
}
```

java7以降や、もうちょっと新しい書き方は
いわゆるローンパターンと呼ばれるものがあります。
専用構文やAPIがなくても、高階関数が使用できる言語ならば
簡単に自作できます。
高階関数を簡単に説明すると、関数を引数 or 返値として
取る関数のことを言います。
(高階関数は、後で時間が有れば話すかもしれません
関数型プログラミング関連の話です。)

なぜか、scalaと言う言語には、これが標準ライブラリには
用意されていません。

javaでは、try-with-resources Statement
c#だとusingステートメントを使用します。

Scala using（ローンパターン）
http://www.ne.jp/asahi/hishidama/home/tech/scala/sample/using.html
もう少しカッコよく実装すると、こんな感じだけど
scalaの暗黙の変換があるので、気にしないでください。
http://qiita.com/piyo7/items/c9be1f39bcfea43a778a

***

__その二__
try-catch構文で、関数や処理で例外を、細かくキャッチしている。
これは、try-catch構文の趣旨とは違う書き方です。

try-catchでcatchするのは、アプリケーションの一番外側のみに
するのが、基本であり、catchするのは、catchで復帰処理が可能性で
処理が続行できる場合や、特別な事情がある場合のみとするのが
一般的だと思われます。

当たり前ですが、特別な事情が、頻繁にあらわれるはずがないので
頻発する場合は、設計をミスっています。

また、上で一般的と言いましたが、その様な常識は
以下の本等で仕入れてください。

リーダブルコード
https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655

すすめてなんですが、自分は読んでいません
言い訳をすると、下記の様に
パラパラめくってみると何処かで読んだようなことばかりで
初心者向けに見えるので、読む優先順位が低いです。
ですが、評判が良いことや、知っている人が呼んでいて
特に、文句を言っていないところを見ると、良い本なのだと思います。

定量的な評価がない
「経験豊富なプログラマーにとって、リーダブルコードに
目新しい物はなにもない」
http://snowlong.hatenablog.com/entry/2015/08/31/141137

***
蛇足
ですが、代わりに自分は、以下を読みました。
(自分は、数年前から、もっと尖がった関数型プログラミング等に
興味があり普通の書き方も、ある程度知っています。)

CODE COMPLETE
(1版)
おすすめです。英語3版が出ています。
https://www.amazon.co.jp/%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88%E2%80%95%E5%AE%8C%E5%85%A8%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%97%E3%81%A6-Microsoft-PRESS-%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%96-%E3%83%9E%E3%82%B3%E3%83%8D%E3%83%AB/dp/4756102107

達人プログラマー―システム開発の職人から名匠への道
https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E2%80%95%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%96%8B%E7%99%BA%E3%81%AE%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93-%E3%82%A2%E3%83%B3%E3%83%89%E3%83%AA%E3%83%A5%E3%83%BC-%E3%83%8F%E3%83%B3%E3%83%88/dp/4894712741

プログラミング作法 
https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E4%BD%9C%E6%B3%95-%E3%83%96%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3-%E3%82%AB%E3%83%BC%E3%83%8B%E3%83%8F%E3%83%B3/dp/4756136494

その他、リファクタリング本などなど
***
続き
リーダブルコードより、もっと定量的なものが欲しく
1000ページ越えの本を読むのを厭わないのであれば
次の本がおすすめです。
色々なプロジェクトのデータの統計値を見せながらの説明があるので
ある程度説得力があります。

CODE COMPLETE
(2版)
https://www.amazon.co.jp/CODE-COMPLETE-%E7%AC%AC2%E7%89%88-%E4%B8%8A-%E5%AE%8C%E5%85%A8%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%97%E3%81%A6/dp/489100455X

Effective Java
(2版だけど)
https://www.amazon.co.jp/EFFECTIVE-JAVA-Java-Joshua-Bloch/dp/4621066056



__まとめ__

以上、挙げたほかにも、色々な常識・知識があります。

常識は、現場だけでは、仕入れられません。
現場には、staticおじさん等のような、ワカランチンが
仕切っていることも、珍しくないからです。

有名なstaticおじさん
http://el.jibun.atmarkit.co.jp/minagawa/2010/04/post-ebc4.html

(そういう人は、俺の○十年の経験では・・・と言ったりしますが
 一人の人間が経験出来ることなんて、高々100年分しかありません。
 人類60億人の中の世界ランカーレベルの人が、代々知識を受け継いで
 継ぎ足した知見に比べると、たかが○十年の経験では
 ヒヨッコすぎます。井の中の蛙です。
 そう言う人には、ハイハイ言って
 心の中で無視してください。
 あるいは、その現場限りとしてください。
 ただ、馬鹿にするのは人として良くないです)

本や、web等の情報にアンテナを張り
先ずは普通の書き方を習得してください。
それが出来てから、もっと尖がった書き方や
エレガントな書き方を追求しても良いでしょう。

以上、初心者に対する個人的な意見でした。

LT第2弾
http://qiita.com/zeal1483/items/a203c3660e3ae264b3fc