7
3

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】最近使い方がわかってきたメソッド5選

Posted at

はじめに

最近使い方がわかってきたメソッドを5つまとめました。
5選と言いつつ、丁度5つしかありません。

values_at

引数で指定されたキーに対応する値の配列を返します。

h = {1=>"a", 2=>"b", 3=>"c"}
p h.values_at(1,3,4)               
#=> ["a", "c", nil]

例えば、ユーザーのプロフィール情報がハッシュに格納されていて、特定の情報(例:名前、年齢、住所)だけを取得したい場合などに使います。

profile = {name: "Taro", age: 20, address: "Tokyo", job: "Engineer"}
p profile.values_at(:name, :age) #=> ["Taro", 20]

max

maxは、配列の要素から最大値を返すメソッドです。
引数がない場合、配列の中から最大の要素を返します。
引数がある場合、引数で指定した数だけ最大の要素を降順の配列で返します。

sample = [5, 8, -6, 15]
result = sample.max # resultには15が返されます
result = sample.max(2) # resultには[15, 8]という配列が返されます

min

min、配列の要素から最小値を返すメソッドです。
引数がない場合、配列の中から最小の要素を返します。
引数がある場合、引数で指定した数だけ最小の要素を昇順の配列で返します。

sample = [5, 8, -6, 15]
result = sample.min # resultには-6が返されます
result = sample.min(2) # resultには[-6, 5]という配列が返されます

個人的には引数で与えるのではなく、配列で比較するように使うと便利でした。

transform_values

transform_valuesは、ハッシュの全ての値に対してブロックを呼び出し、その結果で置き換えた新しいハッシュを返します。

h = { a: 1, b: 2, c: 3 }
h = h.transform_values {|v| v * v + 1 } # hは{ a: 2, b: 5, c: 10 }になります

ハッシュの全ての値に対して同じ操作を適用したい場合に便利です。
例としては、商品の価格がハッシュに格納されていて、全ての価格に対して税を適用したい場合などに使えそうです。

prices = {apple: 100, banana: 200, orange: 150}
prices_with_tax = prices.transform_values {|price| price * 1.1 }
p prices_with_tax #=> {:apple=>110.0, :banana=>220.0, :orange=>165.0}

tap

tapは、レシーバ(呼び出し元のオブジェクト)を引数としてブロックを評価し、その後でレシーバを返します。

value = 10
value = value.tap{|x| p x * 2 } # 20が出力され、valueは10のままです

tapメソッドはレシーバをそのまま返すため、メソッドチェーンの途中で変数の値を確認するなどのデバッグに利用できます。

[1, 2, 3, 4, 5].tap { |x| puts "original: #{x.inspect}" }.select { |x| x.even? }
# original: [1, 2, 3, 4, 5] => [2, 4]

7
3
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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?