配列 / 繰り返し処理

inject / reduce

before

def to_hex(r, g, b)
  '#' +
    r.to_s(16).rjust(2, '0') +
    g.to_s(16).rjust(2, '0') +
    b.to_s(16).rjust(2, '0')
end

after

def to_hex(r, g, b)
  [r, g, b].inject('#') do |hex, n|
    hex + n.to_s(16).rjust(2, '0')
  end
end

map / collect

before

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

after 1

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

after 2

範囲オブジェクトの代わりに正規表現とscanメソッドを使うことでより簡潔に。

def to_ints(hex)
  hex.scan(/\w\w/).map(&:hex)
end

当たり前のように、ここまでリファクタリングできたらかっこいいよなぁ。。