リファクタリングワークブック その1

さて、今日からリファクタリングワークブックをやり出した。

今日は、コメントと長すぎるメソッドをやってみました。

以外と難しい。これは勉強会でやればとっても面白いかも。
たぶん、人ぞれぞれで違ったリファクタリングが見れるしね。
素晴らしい気づきが得られるでしょう。

でも、初心者にはちょっと難しいかなと言うのが正直なところ。
名著リファクタリングは最低読んでおかないとね。

まず、コメント。
これは、上から順に3つメソッドを作成すればOKだね。
それぞれこんな風になりました。
int deleteBiggerValues(int actual, int clipLimit);
boolean lengthEquals(int expected, int actual);
boolean checkDelta(int expected, int actual, int delta);

ここは、メソッド化することよりも命名が大事。
みんなはどんなメソッド名にしたんだろう。
これは大勢集まったら面白いよ。絶対。
ちなみにこのメソッド名は満足してません。
そもそも「check」は使うべきではないので、
別の表現を考えるべきでしょうね。
(なんでかっつーと、抽象的過ぎるからです。)

次に長すぎるメソッド。
これは、
ヘッダ出力、フッタ出力、各引数の情報出力に分ければいいのかな。
で、命名
outputHeader();
outputMachines();
outputRobot();
outputFooter();
にしておきました。 これも安易過ぎるかな(笑

長すぎるメソッドに 1行をメソッドにする意味はあるかとありますが、これは大いにありますね。
特に判定文のちょっと面倒なのをメソッドにすると可読性がバツグンに上がります。

で、そのまえのリファクタリングのサイクルってところ。
他の本でも結構細かくやってくのが普通なんだけど、
eclipseのような高機能IDEを使ってるとここまでやらないのが常です。
eclipseだと、即時コンパイルを活用することで、
もっと早く確実なリファクタリングができると考えています。

これは、「IDE依存リファクタリング」とでも言うやつですかね。

この例のように、
フィールドにgetter,setterを付ける場合なら、
まず、getter,setterを自動生成します。
その後、フィールドをprivateにします。
即時コンパイルにより、エラーが露見するので、
エラーが出た箇所を全て修正していきます。
はい、これで完了。
エラーは一覧で見れるので、簡単に全て修正できます。

このようなリファクタリングもアリなんじゃないかな?

リファクタリング―プログラムの体質改善テクニック
マーチン ファウラー Martin Fowler 児玉 公信 平澤 章 友野 晶夫 梅沢 真史
ピアソンエデュケーション (2000/05)
売り上げランキング: 44417
おすすめ度の平均: 5.0
5 オブジェクト指向がなんでいいの。その回答がここにある。
5 体質改善の処方箋
5 可読性向上の特効薬

リファクタリングワークブック
株式会社テクノロジックアート
アスキー (2004/07/16)
売り上げランキング: 386566
おすすめ度の平均: 2.0
2 ちょっと期待はずれ