0
0

Ruby 3.3 リファレンスマニュアルのEnumerableモジュールの概要を要約してみる※備忘録

Posted at

私自身、リファレンスを見ることをしていなかったことを見直し、改めてリファレンスを見ながらRubyを学習しようと思い、早速mapメソッドが気になったので、以下のリファレンスを見てみることにした

Ruby 3.3 リファレンスマニュアル ライブラリ一覧 組み込みライブラリ Enumerableモジュール
https://docs.ruby-lang.org/ja/latest/class/Enumerable.html#I_ALL--3F

しかし読んでみると早速、要約で詰んでしまった。
<以下要約>
繰り返しを行なうクラスのための Mix-in。このモジュールのメソッドは全て each を用いて定義されているので、インクルードするクラスには each が定義されていなければなりません。

Array, Hash, Range, Enumerator等のクラスで、 Enumerableモジュールはインクルードされています。ただし、効率化のため、そのクラスでEnumerableと同名・同等の機能を再定義(オーバーライド)しているケースも少なくなく、特にArrayクラスでは同名のメソッドを再定義していることが多いです。

ただ、今回は諦めずに読み進める決意をした。

1.まずMix-inについては、Rubyのmoduleという機能があり、これは名前空間とMIX-INという機能を持っている。
これは、同じクラス名などがあった場合に別の名前にする機能を持ち、さらに、MIX-INは、module名をクラス内でinclude Enumerable(モジュール名)することで、moduleのメソッドを利用できることを表している。

2.「このモジュールのメソッドは全てeachを用いて定義されている。」とはつまり、eachメソッドで繰り返し処理をすることを前提に作られたメソッドだから、eachメソッドを利用したクラスを作成してね!また、その時は、クラス内でeachメソッドを実装し、そのメソッドで要素の繰り返し処理を行うようにしてね!ということ

3.「Array, Hash, Range, Enumerator等のクラスで、 Enumerableモジュールはインクルードされています。」
上記の標準クラス(型とも捉えていい)は、クラス作成時にEnumerableモジュールをincludeしているからすぐにEnumerable内のメソッドを利用できることを表している。

4.ただし、効率化のため、そのクラスでEnumerableと同名・同等の機能を再定義(オーバーライド)しているケースも少なくなく、特にArrayクラスでは同名のメソッドを再定義していることが多いです。
これは、Enumerableモジュールをincludeして、例えば、Arrayクラスなどのmapメソッドも同名のメソッドだけど内部の処理はオーバーライド(再定義)しているから完全に一致はしていなことを表している。

このように読み進めることで、Enumerableモジュール内のメソッドの概要を掴むことができました。リファレンスを読解することで、Rubyの奥深さを知る良いきっかけになったと思います。

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