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 3 years have passed since last update.

【Ruby】mapメソッドを使ったリファクタリング

Last updated at Posted at 2021-07-20

ポイント

空の配列を用意して、他の配列をループ処理した結果を空の配列に詰め込んでくような処理の大半は、mapメソッドに置き換えることができる。

def to_ints(hex)
  r, g, b  = hex[1..2], hex[3..4], hex[5..6]
  ints = []
  [r, g, b].each do |s|
    ints << s.hex
  end
  ints
end

# to_ints('#000000')
# => [0, 0, 0]

# to_ints('#ffffff')
# => [255, 255, 255]

上のコードの処理は、
・引数の文字列から3つの16進数を抜き出し、
・3つの16進数を配列に入れ、ループを回しながら10進数の整数に変換した値を別の配列に詰め込み、
・10進数の整数が入った配列を返す。
という処理を行っています。

ここで冒頭のポイントの通り、
「空の配列を用意して、他の配列をループ処理した結果を空の配列に詰め込んでくような処理の大半は、mapメソッドに置き換えることができる。」
ので、以下のようにmapメソッドに置き換えられます。

def to_ints(hex)
  r, g, b  = hex[1..2], hex[3..4], hex[5..6]
  [r, g, b].map do |s|
    s.hex
  end
end

mapメソッドはブロックの戻り値を配列の要素にして新しい配列を返すメソッドなので、
リファクタリング前のコードのように、変数を用意しなくとも、
mapメソッドとブロックだけで処理を完結できます。

参考文献

伊藤 淳一 「プロを目指す人のためのRuby入門」, 技術評論社, 2017

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