こんにちは!趣味と実益を兼ねてプログラマをしている hikaru-kimi です!!
普段、皆さんはどのようにプログラミング学習をされてますか?
ご自身でアプリケーションを作成されたり、本を読んで知識を身に着けたり、人それぞれだと思います!
かく言う私は、趣味の延長でライブラリのソースコードを読むことも多々あります!
ライブラリのソースコードを読むなんて敷居が高いなと思ったそこのあなたのために、 本日は一緒にライブラリのソースコードを読み解いていきましょう!
題材はスバリ、弊社サービス「Re:lation」で用いられている Ruby on Rails (以下 Rails)です!
Railsは、ActiveRecord や ActiveModel といった複数のライブラリ群で構成されています。
今日は、初学者でも比較的とっつきやすい ActiveSupport の Array class について取り扱いたいと思います!
version は 6.1 系でお話します。
実際の class 定義は以下のリンクにあります。
色々とメソッドが定義されてますね!
適当に見ていくと、second
というメソッドが定義されてます!
def second self[1] end
定義を読むとお分かりのように、配列の2番目の要素を返すメソッドですね!
普段何気なく利用していますが、改めて定義を読むと「こんなに単純な定義だったんだ」と、ある意味感動すら覚えますね!
直下には third
, fourth
, fifth
というメソッドが定義されてます。
これらも簡単なので分かりやすいですね!
ちなみに first
がないのは、Rails ではなく Ruby 本体の Array
クラスにて定義済みだからです。
ActiveSupport は Ruby の拡張を目的としてますので、重複した定義はなされないということです。
fifth
までは定義されてますが、sixth
, seventh
, …は存在しないみたいですね。
実際に ActiveSupport が使用可能な環境で実行してみましたが、sixth
だと NoMethodError
が発生します。
irb(main):003:0> [1,2,3,4,5,6,7,8,9,10].sixth Traceback (most recent call last): 2: from (irb):2 1: from (irb):3in `rescue in irb_binding' NoMethodError (undefined method `sixth' for [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:Array)
これくらいなら簡単に定義できそうですし、私なんかからするとコントリビュートチャンスでは?と思ってみたりします!
(ニーズをコミッター陣に説明できないと reject されそうではありますが…!やってみる価値はありそうですね!)
その後もメソッドを追っていきますと、唐突に fourty_two
というメソッドが現れます!
その名の通り、配列の42番目の要素(インデックスでいうと41番目)を返すメソッドにはなりますが、2, 3, 4, 5と来てどうして42という微妙な数字なのでしょうか??
以後 43, 44, …と続くわけでもなく、ますます疑問が深まります。
そんなときはコメントを読んでみましょう!
コメントに意味深な文がありますね!
# Equal to <tt>self[41]</tt>. Also known as accessing "the reddit".
the reddit というのはアメリカの有名なWeb掲示板のことだそうですが、いまいち関係性が分かりません…
また、「42」という数字は西洋では「Answer to the Ultimate Question of Life, the Universe, and Everything」(訳: 「生命、宇宙、そして万物についての究極の疑問の答え」)を意味するそうです。
情報源が Wikipedia で恐縮ですが、ダグラス・アダムズのSF小説「銀河ヒッチハイク・ガイド」で登場するフレーズのことだそうです。
出展: 生命、宇宙、そして万物についての究極の疑問の答え - Wikipedia
茶目っ気で定義したのでしょうか?それとも sixth
, seventh
, …と定義するのが面倒になって、それこそ「生命、宇宙、そして万物についての究極の疑問の答え」として包括的に定義したのでしょうか?
fourty_two
メソッドの定義の意図についてお分かりの方、是非とも以下のリンクより弊社採用サイトにご応募いただいた上で、カジュアル面談の場でお聞かせください!!