8
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?

シーエー・アドバンスAdvent Calendar 2024

Day 8

Ruby/Ruby on Railsの便利メソッドの紹介

Last updated at Posted at 2024-12-07

Ruby/Railsの便利メソッドの紹介

はじめに

このドキュメントは、Rubyプログラミング言語における便利なメソッドやテクニックを紹介するものです。
Rubyのコードをより簡潔で読みやすく、効率的に書くためのヒントを提供します。各セクションでは、具体的なコード例とその実装のポイントを説明しています。

RubyやRailsを始めたばかりの頃に知っておきたかったこと、独自で実装したが実は既にメソッドとして存在していたことなど、初心者の方にぜひ知ってほしい内容をまとめています。よかったら参考程度にみてください〜 :raised_hands:

1. ifとunlessの使い分け

条件分岐を簡潔に書くために、ifの代わりにunlessを使うことができます。

# ユーザーが管理者の場合、ダッシュボードを表示する
show_dashboard(user) if user.admin?
# ユーザーが管理者でない場合にリマインダーメールを送信する
send_reminder_email(user) unless user.admin?

実装のポイント

  • ifは条件が真の場合に実行され、unlessは条件が偽の場合に実行されます。
  • 簡潔に条件分岐を記述することで、コードの可読性を向上させます。

2. &:methodシンタックス

配列を順番に処理する際に、&:methodを使うことでコードを短縮できます。

names = users.map(&:name)

実装のポイント

  • &:methodシンタックスは、mapselectなどのメソッドで使うと、ブロックを省略して簡潔に記述できます。
  • シンボルを使うことで、コードがより読みやすくなります。

3. safe navigation operator(&.)

オブジェクトがnilでない場合にメソッドを呼び出し、nilの場合はnilを返します。

email = user&.profile&.email

実装のポイント

  • &.演算子を使うことで、nilチェックを簡潔に行うことができます。
  • ネストされたオブジェクトのプロパティにアクセスする際に、nilによるエラーを防ぐことができます。

4. presenceメソッド

オブジェクトがnilまたは空でない場合にそのオブジェクトを返し、そうでない場合はnilを返します。

name = user.name.presence || "What's your name?"

実装のポイント

  • presenceメソッドは、オブジェクトがnilまたは空でないかを簡単にチェックできます。
  • デフォルト値を設定する際に便利です。

5. Enumerable#tallyで要素の出現回数をカウント

配列内の要素の出現回数を簡単にカウントできます。

fruits = ["apple", "banana", "apple", "orange", "banana", "apple"]
count = fruits.tally
# => { "apple" => 3, "banana" => 2, "orange" => 1 }

実装のポイント

  • tallyメソッドは、配列内の各要素の出現回数をカウントし、ハッシュとして返します。
  • 簡潔に要素の頻度を把握することができます。

6. transform_valuesメソッドでハッシュの値を変換

ハッシュの値を一括で変換する場合に便利です。

prices = { apple: 100, banana: 200 }
discounted_prices = prices.transform_values { |v| v * 0.9 }
# => { apple: 90.0, banana: 180.0 }

実装のポイント

  • transform_valuesメソッドを使うと、ハッシュの各値に対して一括で処理を行うことができます。
  • ブロック内で値を変換し、新しいハッシュを返します。

7. Array#differenceで配列の差を求める

2つの配列の差を求めることができます。

a = [1, 2, 3, 4]
b = [3, 4, 5]
difference = a.difference(b)
# => [1, 2]

実装のポイント

  • differenceメソッドは、最初の配列から2番目の配列に含まれる要素を取り除いた新しい配列を返します。
  • 配列の差を簡単に求めることができます。

8. digメソッドを使ったネストされたハッシュのアクセス

ネストされたハッシュから安全に値を取得するために、digメソッドを使うことができます。これにより、存在しないキーにアクセスしようとしたときにエラーを防ぐことができます。

user = { profile: { name: "Alice", age: 30 } }
name = user.dig(:profile, :name) # => "Alice"
non_existent = user.dig(:profile, :non_existent) # => nil

実装のポイント

  • digメソッドは、ネストされたハッシュや配列の中から安全に値を取得するために使います。
  • 存在しないキーにアクセスしてもnilを返すため、エラーを防ぐことができます。

9. Array#unionで配列の和を求める

2つの配列の和を求めることができます。

a = [1, 2, 3]
b = [3, 4, 5]
union = a.union(b)
# => [1, 2, 3, 4, 5]

実装のポイント

  • unionメソッドは、2つの配列を結合し、重複を取り除いた新しい配列を返します。
  • 配列の和を求める際に便利です。

10. Array#intersectionで配列の共通部分を求める

2つの配列の共通部分を求めることができます。

a = [1, 2, 3]
b = [3, 4, 5]
intersection = a.intersection(b)
# => [3]

実装のポイント

  • intersectionメソッドは、2つの配列の共通要素を含む新しい配列を返します。
  • 配列の共通部分を簡単に求めることができます。

11. Kernel#thenでメソッドチェーンを簡潔に

thenメソッドを使うことで、メソッドチェーンをより簡潔に記述できます。

result = [1, 2, 3].map { |n| n * 2 }.then { |arr| arr.sum }
# => 12

実装のポイント

  • thenメソッドは、オブジェクトに対して次の処理をチェーンする際に使います。
  • メソッドチェーンをより読みやすく、簡潔に記述できます。
8
1
1

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
8
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?