Home > IT > Java言語で学ぶリファクタリング入門 #0

Java言語で学ぶリファクタリング入門 #0

  • 2008-11-25 (Tue)
  • IT
人は美しいものが好きだ・・・

そして、それが動いているコードなら、この世で最も美しい。
ぼくの名前はワーロック・リポート。

・・・唐突に仕事の話題ですが。

Java言語で学ぶリファクタリング入門

『Java言語で学ぶリファクタリング入門』を発注、受領しました。

実務で再び(3 年ぶりくらいに) Java のコードを書けるようになって半年ほど経過しました。
しかし、どうも自分のコーディングに「不吉な匂い」、特に

{疑わしき一般化}
{不適切な関係}

を感じ始めたので粛清修正したいな、というのと勉強がてら。

そもそもリファクタリングとは、大きく言うとプログラミング。
・・・大きすぎるので小さく言うと、動いているプログラムのコードを書き換えること。
ただし、

・リファクタリングを行っても、外部から見たプログラムの振る舞いは変わらない。
・リファクタリングを行うと、プログラム内部の構造は改善する。

という 2 点は抑えた上で。
じゃあ、どこを書き換えるかというと、「不吉な匂い」がするところです(意味的には「臭い」なのだけど、とりあえずそのままで)。
詳細は、

不吉な匂い(オブジェクト倶楽部)

ここを見てもらうとして、この「不吉な匂い」というのは、プログラミングに触れた人なら誰もが感じるヤツだと思います。
少なくとも、この嗅覚が無ければプログラマを名乗ってはいけません、確か、たぶん。
代表的なところでは、

{重複したコード}
{長すぎるメソッド}
{巨大なクラス}
{多すぎる引数}
{変更の発散}
{データの群れ}
{基本データ型への執着}
{スイッチ文}
{データクラス}

・・・あたりでしょうか。
特に、80 年代の COBOL プログラムを見てきた身にとっては、もう勘弁して欲しい匂いです。

敢えて言おう、この悪臭を意に介さない人はプログラミングをやめるべきだと。

さておき、この「匂い」を全部覚えるのは大変なので、本書にあるように、

ダブってる!
長すぎ!
多すぎ!
名前が合ってない!
公開しすぎ!
オブジェクト指向っぽくない!

これらのセリフ(またはコードを読んだときの感想)が出てきたら要注意、と覚えておきましょう。
ちなみに、最後の「オブジェクト指向っぽくない!」は、

・switch文やif文を使って、処理を分岐ばかりしている
・instanceofを使って、オブジェクトが属するクラスを調べている
・intばかり使って、専用のクラスを作らない

あたりをヒントに嗅ぎ分ければ良いのですが、これは抽象化や多様性を利用したコードが書かれていないのと、ほぼ同義です。
逆に、オブジェクト指向で実装すると処理の流れが把握しづらいという話も聞くのですが、それではプロセス(だけ)に魂を引かれたオールドタイプと変りません。
ニュータイプでイノベーターな開発者は、その辺はクリアしておきたいところ。
とはいえ、抽象化・多様性などを使い過ぎでも今の私のようになってしまいます。

・・・という訳で、このエントリーが現れました。

何でもかんでもリファクタリングしたがるのは、リファクタリングを学んだ人が陥る落とし穴ですから、注意してください。

引き続き、これに注意しながらリファクタリングを進めます。

Home > IT > Java言語で学ぶリファクタリング入門 #0

Page Top