こんにちは、鈴木です。
Ruby on Rails の縁の下の力持ちといえば ActiveSupport です。
普段から「便利だなぁ」と思いながら使っているものの、いくつかの良く使うメソッドしか知りません。
ということで、ActiveSupport のソースコードを読んで、しっかり学びたいと思います。
今回は core_ext/array/access.rb を読みます。
Array#from(position)
このメソッドは、配列から指定したインデックス以降の要素を取り出します。
実装は以下のようになっています。
1 2 3 |
def from(position) self[position, length] || [] end |
Array#[](position, length) はインデックスが position の要素から length 個を取り出します。
実際に動かしてみると、以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
[0, 1, 2].from(0) # => [0, 1, 2] [0, 1, 2].from(1) # => [1, 2] [0, 1, 2].from(2) # => [2] # 負数を与えた場合は, 末尾からのインデックス. [0, 1, 2].from(-1) # => [2] # 範囲外の場合は空の配列. [0, 1, 2].from(3) # => [] [0, 1, 2].from(-10) # => [] |
Array#to(position)
Array#to(position) は Array#from(position) の対となるメソッドです。
配列の先頭からインデックスが position+1 までの要素を取り出します。
実装は以下のようになっています。
1 2 3 |
def to(position) first position + 1 end |
Array#first(length) は配列の先頭から length 要素を取り出すメソッドです。Array#first(length) を利用して「先頭から position+1 までの要素を取り出す」という処理を実現しています。
動かしてみると、以下のようになります。
1 2 3 4 5 |
[0, 1, 2].to(0) # => [0] [0, 1, 2].to(1) # => [0, 1] [0, 1, 2].to(2) # => [0, 1, 2] [0, 1, 2].to(3) # => [0, 1, 2] [0, 1, 2].to(-1) # => [] |
Array#second, third, fourth, fifth, forty_two
これらのメソッドは、配列の N 番目の要素を取得するメソッドです。
例えば、Array#second は 2 番目の要素、Array#third であれば 3 番目の要素を返します。
2 番目(second)、3 番目(third)、4 番目(fourth)、5 番目(fifth)、の次が 42 番目(forty_two)であるのは、reddit というサービスで使われているからだそうです。
動かしてみると、以下のようになります。
1 2 3 4 5 6 7 |
[1, 2, 3, 4, 5].second # => 2 [1, 2, 3, 4, 5].third # => 3 [1, 2, 3, 4, 5].fourth # => 4 [1, 2, 3, 4, 5].fifth # => 5 # 要素が空の場合. [].fifth # => nil |
今後は ActiveSupport の他の機能のソースも読んでみようと思います。