記憶の外付けHDD

切実に頭にUSBのコネクターがほしいです。なるべくtype-cでお願いしたいです。(忘れないように、プログラミング学習で学んだことを投稿してます)

2019/10/17_チェリー本(10日目)

はじめに

今日もチェリー本、ちょっとだけ読みました。

読んだ本

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus | 伊藤 淳一 | コンピュータ・IT | Kindleストア | Amazon

本編

読んだページ数

  • 第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で済む内容なんですよね…
例題考えるの、むずかしい!!

以上