読者です 読者をやめる 読者になる 読者になる

アラタナエンジニアブログ

aratana Engineer's Blog

世界にひとつだけのインデント 〜オブジェクト指向エクササイズ ルール1〜

DDD(ドメイン駆動設計) オブジェクト指向 リファクタリング

あけましておめでとうございます。

今年もアラタナエンジニアブログをよろしくお願いいたします。

新年一発目の記事ですが、、、

去年の暮にこんな記事を書いていました。

lab.aratana.jp

その後、ルール2、3、8となんとも中途半端な順番で解説する記事を書いていたので・・・

世界からelse句が消えたなら 〜オブジェクト指向エクササイズ ルール2〜 - アラタナエンジニアブログ

ラップは無駄に見えるが役に立つ♡ 〜オブジェクト指向エクササイズ ルール3と8〜 - アラタナエンジニアブログ

あらためて、ルール1について書いてみたいと思った次第です。><;

ルール1はこんなルールです。

1つのメソッドにつきインデントは1段落までにすること

つまり、forの中にifや別のforを入れない、ifの中にforや別のifを入れないということです。

これは、

各メソッドが厳密に1つの仕事を行うこと

を徹底させることを意図しています。

メソッドが1つの仕事のみを行うようにすると、単純にメソッドの行数が減ります。

メソッドの行数が減ればそれは、再利用できるメソッドができるということです。

ルール1の裏ルール

そこで、このルールの裏ルールはこちらです!!!

メソッドの行数を3行以内にする

厳しいですか?厳しいですね。

でも、ただ1つの仕事をする再利用可能で、保守性が高く、変更に強いメソッドってこういうことなんです。

仕事は大体3ステップ

そもそも、大体の仕事って3ステップで完結するものが多いのですよ。

「チェック」・「実行」・「通知」の3ステップ。
「準備」・「実行」・「後処理」の3ステップ。
「ホップ」・「ステップ」・「ジャンプ」、
「チャー」・「シュー」・「メン」、
「アン」・「ドゥ」・「トゥロワ」

ということを考えると1メソッド3行というのは、決して無理な注文ではないのです。

リファクタリングによる解決策

さて、具体的にどうすれば3行以内のメソッドにできるかというと・・・

以前紹介したガード節やポリモーフィズムが役に立つと思います。

世界からelse句が消えたなら 〜オブジェクト指向エクササイズ ルール2〜 - アラタナエンジニアブログ

また、単純にif文やfor文をメソッドして抜き出す(メソッドの抽出)のもパターンですね。

メソッドの抽出は、IDEリファクタリングの機能を使うといいですよ。

たとえばIntelliJであれば、こんな感じで簡単にメソッドの抽出ができます。

f:id:kimesawa:20170113085848p:plain

そうすると・・・

f:id:kimesawa:20170113091639p:plain

メソッドが抜き出せます。

f:id:kimesawa:20170113091724p:plain

ぜひ使ってみて下さい\(^o^)/