2019/10/17_チェリー本(10日目)
はじめに
今日もチェリー本、ちょっとだけ読みました。
読んだ本
本編
読んだページ数
- 第4章(P102〜P114)
新しく知ったこと
読んだ部分は、プログラムを作成する例題の部分でした。
そこで解説されていたリファクタリングの考え方が参考になったので、それを書きます。
例題コード
以下のコードをリファクタリングしたいと思います。
def principal(d, r, y) d.upcase + r.upcase + y.upcase + end puts principal("d", "r", "y") #=> DRY
リファクタリング①:DRY原則
- DRYとは、"Don't repeat yourself"の略
- 「繰り返しを避ける」という意味
- 例題コードの場合、
upcase
メソッドを3回も繰り返して使っている- 問題点:コードを書き換えるとき、同じ修正を3回する必要があり、書き換えをミスする可能性が高まる。
修正例
def principal(d, r, y) dry = "" [d, r, y].each do |ele| dry << ele.upcase end dry + "原則" end puts principal("d", "r", "y") #=> DRYの原則
解説
- upcaseメソッドを3回記載するかわりに、引数を配列に格納して、eachメソッドを使用しました。
リファクタリング②:適切なメソッドを使用
eachメソッドブロック処理では、Stringクラスの変数「dry」へ各要素をしている。
この部分は、injectメソッドを使用すると、もっとすっきり書けます。
※ injectメソッドは2019/10/15_チェリー本(8日目)で解説してます。
修正例
def principal(d, r, y) [d, r, y].inject(""){ |dry, ele| dry + ele.upcase } end puts principal("d", "r", "y") #=> DRY
- injectメソッドを使えば、変数 dryの定義が不要
do~end
も{~}
に書き換えた
ということで、コードをスッキリさせることができました。
あとがき
リファクタリングをしてきましたが、"dry".upcase
で済む内容なんですよね…
例題考えるの、むずかしい!!
以上