免責事項フリーランスエンジニア→法人化した人の技術ブログ。フリーランス事情や会社の作り方、経営などについても徒然なるままに書いていきます。主な使用言語はRuby、JavaScript。2019年4月24日Tweet今回はメソッドに関するRubyのメタプログラミング技法についてまとめていきたいと思います。JavaやC言語などの静的言語では、コンパイル時にすべてのメソッドに対して対応するメソッドが存在するかどうかを評価します。存在しなければ、コンパイルエラーとなりバイナリファイルが作成されません。Rubyのような動的言語では、この制約がなく、メソッドは呼ばれるときに存在すれば良く、そのメソッドをどのような型のインスタンスが呼んでいるかすら気にしません。アヒルのように歩き、アヒルのように鳴くのなら、それはアヒルなのです。このように、Rubyはメソッドの定義や呼び出しに対してかなり寛容です。World!このように、普通のメソッド呼び出しは.演算子を用いて呼び出します。ドット記法でなく、Object#sendを使ってメソッドを実行するObject.send(:method,args)でもメソッドを呼び出すことが出来ます。World!__send__はsendのエイリアスメソッドまた、sendというメソッド名は他のメソッド名と被りやすいため、sendというメソッドも用意されています。これはsendのエイリアスメソッドなので、同じ挙動を示します。World!privateメソッドも呼び出せるsendメソッドでは、privateメソッドも呼び出すことが出来ます。OrientedプライベートメソッドのRSpecテストを行うときに、そこそこ役に立つ技法です。defキーワードを使わずにメソッドを動的に定義するModule#define_methodを使えば、メソッドをその場で定義できます。それにはメソッド名とブロックを渡す必要があり、ブロックがメソッドの本体になります。1000インスタンスのメソッド一覧を取得するインスタンスのClass名が.classで取得できるように、インスタンスのメソッド名も.methodsで取得することができます。walking..."メソッドを定義せずに、あたかも歩くことができるかのようにメソッドに振る舞わせることができました。method_missingはかなりコアな機能であり、可能であれば動的定義を使ったほうがいいですが、最終奥義がmethod_missingのオーバーライドであるということは頭の片隅に置いておいたほうがよいでしょう。rails5.0をgemでインストールします。5.0は正式リリースされているので、バージョン指定は不要。...プログラミングRubyで集合(Setクラス)を扱うSet(集合)クラスとは、その名の通り「要素の集合」を表すクラスです。その性質としては大まかに2つあります。BeanはSingletonだから、状態持たせるとバグるよ。Beanに関するハマりポイントの一つです。SpringでBean指定したクラスは、デフォルトでは暗黙的にSingletonでインスタンスが生成されます。...PREVドキュメントのテンプレをすぐにコピペできるようにしておくシェルスクリプトNEXT[遊んでみた]RubyでJavaを書くyohira_dev正社員になるも80時間以上のサービス残業により過労退職→フリーランスエンジニア→月商100万突破、2017年法人成り。RailsとVue.jsを用いた高速実装・改善が強み。BeanはSingletonだから、状態持たせるとバグるよ。SESで簡単なログイン認証を実装する【法人化3年目の体験談】今年の売上は1300万程度で着地しそうです。SESで簡単なログイン認証を実装するオピニオン2019/12/25【法人化3年目の体験談】今年の売上は1300万程度で着地しそうです。免責事項フリーランスエンジニア→法人化した人の技術ブログ。フリーランス事情や会社の作り方、経営などについても徒然なるままに書いていきます。主な使用言語はRuby、JavaScript。AFFINGER5.。