0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Ruby, Rails] リファクタリングに役立つTips集 (初心者向け)

Last updated at Posted at 2022-02-01

Ruby, Ruby on Railsを実務で使用する中で、レビューで指摘いただいたことや自分で調べた便利メソッドなどをリファクタリングの際のTips集としてまとめたいと思います。

メソッドの返り値にはreturnを使用しない

別の言語を使用する際にはreturnを使用して返り値を表現することが多いと思いますが、Rubyではreturnを明示的に書くことは少ないです。

def total(count)
 price = 100
 sum = price * count
 sum  # ここでreturnは不要
end

返り値を配列として返したい場合はmapを使用する

numbersという数字の配列から5以上の数字だけを取り出して result_numbers という配列に入れたい場合、eachを用いると次のように書くことができます。

def method
  result_numbers = []
  numbers.each do |number|
    result_numbers << sample if number >= 5
  end
end

eachの代わりにmapを使えば result_numbers = [] と書かなくても以下のように書くことができます。
mapはブロックで評価した値を配列で返してくれます。

def method
  result_numbers = numbers.map do |number|
    number if number >= 5
  end
end

ぼっち演算子(&.)を用いてレシーバーがnilの場合のハンドリングをする

オブジェクトがnilの場合のハンドリングをしたいときに下記のように書くことができます。

if article
  name = article.author
end

ここでオブジェクト&.メソッド というようにメソッドの前に &. をつけることでオブジェクトがnilの場合でもエラーが出なくなり、オブジェクトがnilの時のハンドリングを省略して書けます。

name = article&.author # articleがnilの場合はnameにnilを代入。

定数は基本的にfreezeさせて使用する

定数にfreezeメソッドを使用しない場合、以下のように破壊的な変更が可能になってしまいます。

  MESSAGE = "hello"
  p MESSAGE.upcase! #=> HELLO

意図しない書き換えを防ぐために、freezeメソッドを使用してイミュータブルなオブジェクトに変換しましょう。
そうすると破壊的な変更が行われようとした際に以下のようにエラーが出ます。

  MESSAGE = "hello".freeze
  p MESSAGE.upcase! #=> can't modify frozen String: "hello" (FrozenError)

ヒアドキュメントを用いて複数行の文字列を定義する

複数行の文字列を定義する場合には下記のように書くことがあると思います。

text = "content1\ncontent2"

この程度の長さなら上記の定義でも問題はなさそうですが、例えばjsonのレスポンスを定義したい場合などにこの書き方をすると見づらくなってしまうと思います。そこでヒアドキュメントを使用すると以下のように定義できます。

text = <<-TEXT
content1
content2
TEXT

文字列を連結する場合は式展開を用いる

文字列を連結したい場合は #+ を用いて連結するのではなく、式展開を用いると良いです。
式展開を用いれば、自動的に .to_s が走り、余計なエラーが発生しなくなります。

price = 200

# #+ を用いて連結する場合
content = price.to_s + "円"

# 式展開を用いて連結する場合
content = "#{price}円"
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?