前提
rubyのArrayクラスのインスタンスメソッドにはいくつか通常の記法とは異なる記法が利用できるメソッドがあると思います。
ruby
1array = [1,2,3] 2 3# パターンA 4array[0] #[]メソッドの場合(ドットの省略且つ引数がメソッド名の間に記述されている) 5array << 9 #<<メソッドの場合(ドットの省略が出来ている) 6 7# パターンB 8array.[](0) #[]メソッドの場合 9array.<<(9) #<<メソッドの場合
当然Rubyを触り始めた時にはパターンAの記法を先に知るわけですが、
[]が演算子や制御構文ではなくて、メソッドだと知ってから、(感覚的で恐縮なのですが)パターンAの書き方が気持ち悪く思えてきました。
質問1
Arrayクラスの[]や<<などのインスタンスメソッドがArrayクラスのインスタンスに対してパターンAの呼び方が出来るのは特別にこのメソッドはこの記法が使える様にrubyが作られているという認識で良いのでしょうか?
質問2
インタプリタ言語が(と言いますかコンパイル言語も触った事ないですしプログラミング言語が自体が)どう動いてるかは軽くググった程度で理解も薄いのですが、Rubyのコードを構文解析して(CRubyであれば)C言語が実行しているという認識でよろしいのでしょうか?
そうであればパターンAの記法は特別に構文解析のパターンに入れられているという認識で良いんでしょうか。
質問3
rubyのリポジトリを見た(=読んでない)のですが、なんとなくStringやNumericなど原始的なクラスごとにC言語で作られているのかなと感じました。
array.cみたいなファイルを見つけたのですが、これ頑張って読んだら[]の謎が解けますか?
質問4(相談気味、無視可)
自分が分からないものが今分からなくても、最低限分からない原因が分かるまではなりたいと思っています。
例えば、Dockerでの環境構築がうまくいかない時に、「これはネットワークとかIPアドレスとかの知識が足りないからググった情報を理解できないんだな」となれば、(勉強を重ねれば解決できる様になるため)その問題は解決出来なくても問題ありません。
その上で勉強するかどうかも自分でコスパを考えながら判断できます。
ただ、全く本質に迫れない様な場面に多々出くわす事があります。
僕はRailsが大好きなのですが、エラーを吐いた時になぜエラーを吐いたのか分からない時に、source_locationなどを利用してRailsを読んでみようと試みるものの関連コードの多さに挫折する事が殆どです。
特にgemを使った場合は顕著で、gem以外の(jsとかの)外部ライブラリを使った場合は更に顕著です。
例えばDeviseを使ってドキュメントに書かれていない動きを実現しようとして、エラーが解決できなかった時に、自分でゼロから作った方が早いじゃん、、、みたいな事になってしまいます。
ググって対症療法的な解決の仕方を見つけて解決できたとしてもすごくもやもやしてしまいます。
なぜ動いているのか(もしくはなぜエラーが出ているのか)を(一定の納得度でも良いので)把握できない事にすごくネガティブになってしまうのですが、例えばある分野について2-3年程度取り組んでいたら基本的にそういった事は無くなるのでしょうか?
例えばRailsにおいて(Rubyの標準クラスに安易に手を加えるべきではないという話しはおいておいて)Hashクラスに自分でインスタンスメソッドを定義したいのですが、やり方が分かりません。
ググってもやり方が出て来ず、ActiveSupportかなーと思ってディレクトリを眺めて見るも手が出せず。
今書きながら思ったんですが普通に
def Hash.custom_method
end
とかやれば良いんじゃね?とか思ったんですがそれどこでかけば良いんだ?
この定義がどこでいつ実行されるんだ?railsの各ファイルの初期化の順番とか把握しないとやばいのでは?
例えばモデルクラス内で使いたい場合ってそれより前にこの定義が実行されないとダメじゃね?
みたいな感じで疑問がどんどん湧いてきます。そして解決できません。
これに関しては試してみればいいですが、試してみて解決できたとして、
そのやり方が賢いのかの判断ができません。
できれば美しくありたいですし。
ちなみに2年ほどRailsを触っていてReactもここ半年ほど触っています。
お金をもらって開発はした事ありますが、実務経験はありません。
そもそも1人で開発を行ってると頭打ちになりやすいのでしょうか。
支離滅裂ですが最終的な質問としてはここまでを踏まえた上で、どうすればあらゆる問題を自力で本質的に解決できる様になるんでしょうか?
(もちろん完全に全てというのはないでしょうが、社会のエンジニア全体で見た時に上位の人は一定その力が強いと思うので、どうすればそれに近づけるんでしょうか?)