0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

『リファクタリング:Rubyエディション』より、つい忘れてしまう書き方

Posted at

はじめに

リファクタリング:Rubyエディション』という本を読んでます。

業務でよく出てくる&すぐ使えるのについ自分が忘れてしまいがちな書き方を備忘録としてまとめます。

第6章と第9章で紹介されていた内容です。

ループからコレクションクロージャメソッドへ

配列から特定の条件を満たす値を抽出する際は、eachメソッドでループを回さずselectrejectといったメソッドを使うことで、よりシンプルに記述できます。

いくつかのサンプルをまとめます。

配列から奇数だけを抽出する

before

irb(main):001> odd = []
=> []
irb(main):002> [1,2,3,4,5,6,7,8,9].each { |i| odd << i if i % 2 != 0 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
irb(main):003> odd
=> [1, 3, 5, 7, 9]

これはselectメソッドを使えばよりシンプルに記述できます。

after

irb(main):001> odd = [1,2,3,4,5,6,7,8,9].select { |i| i % 2 != 0 }
=> [1, 3, 5, 7, 9]
irb(main):002> odd
=> [1, 3, 5, 7, 9]

配列から3の倍数ではない値だけを抽出する

before

irb(main):001> non_multiple_of_three = []
=> []
irb(main):002> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].each { |i| non_multiple_of_three << i if i % 3 != 0 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
irb(main):003> non_multiple_of_three
=> [1, 2, 4, 5, 7, 8, 10, 11, 13, 14]

これはrejectメソッドを使えばよりシンプルに記述可能です。

after

irb(main):001> non_multiple_of_three = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].reject { |i| i % 3 == 0 }
=> [1, 2, 4, 5, 7, 8, 10, 11, 13, 14]
irb(main):002> non_multiple_of_three
=> [1, 2, 4, 5, 7, 8, 10, 11, 13, 14]

条件分岐の組み替え

OR演算子を用いることでより簡潔かつRubyらしく記述できます。

before

irb(main):001* def greeting(name)
irb(main):002*   if name
irb(main):003*     "Hello, #{name}!"
irb(main):004*   else
irb(main):005*     "Hello, guest!"
irb(main):006*   end
irb(main):007> end
=> :greeting
irb(main):008> greeting("Taro")
=> "Hello, Taro!"
irb(main):009> greeting
=> "Hello, guest!"

OR演算子を用いることで条件分岐をシンプルに書けます。

after

irb(main):001* def greeting(name)
irb(main):002*   name = name || "guest"  # OR演算子を活用
irb(main):003*   "Hello, #{name}"
irb(main):004> end
=> :greeting
irb(main):005> greeting("Taro")
=> "Hello, Taro"
irb(main):006> greeting
=> "Hello, guest"

おわりに

リファクタリング:Rubyエディション』にはこの他にもたくさんのリファクタリング手法が出てきます。

Rubyらしい書き方についても理解が深まります。

どれも「必ずそう書くべき」というものではなく、時と場合によって柔軟な判断が求められるように思いました。

業務や学習の中で役に立ったリファクタリング手法があったら、適宜アウトプットしていきます。

参考資料

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?