- クラスもオブジェクトである
- クラス属性もインスタンス属性も
@
で始まるが、別物 - クラスメソッドを定義するときに
self
を使おう - インスタンスメソッドの中では
self
が現在のオブジェクトを指すが、 省けるところでは省いた方が読みやすい
- サブクラスは親からメソッドや属性を受け継ぐ
- インスタンス変数は、その値を初期化(アサイン)されるまで存在せず、参照されたらあたいは nil
- インスタンス変数はそのクラスまたはサブクラスのメソッドから参照できる
- super は現在のメソッドがオーバーライドしているメソッドを呼び出す
- Object クラスから to_s や instance_variables メソッドを継承しているが、to_s をオーバーライドすると綺麗に puts できる
- メソッドにブロックを渡すことによって、指示を与えられる
<=>
を定義して、 Comparable モジュールを mixin したら>, ==, <
が使える。each
メソッドを定義して、Enumerable
を mixin したら、コレクションに対する様々なメソッドが使えるようになる。
JSON request params key を camelCase から snake_case への変換は、 スタンダードなやり方が確定していなさそうだが、選択肢としては
- initializer で deep_transform_keys 変換
- before_action で transform_keys 変換
- その他、gem での対応
- xにhogeメソッドがあれば、 x&.hoge と x.try(:hoge) は x.hoge と同じ
- xにhogeメソッドがなかったら
- xがnilの場合、x&.hogeもx.try(:hoge)もnilになる
- xがnilでない場合、x&.hogeはエラーとなる一方、x.try(:hoge)はnilになる
インスタンスメソッドにおいて、
- @hoge は、インスタンス変数 @hoge を参照します。
- self.hoge は、インスタンスメソッド hoge を呼び出します。
- self.hoge = は、インスタンスメソッド hoge= を呼び出します。
- hoge は、ローカル変数もしくはインスタンスメソッド hoge を呼び出します
- hoge = は、ローカル変数へ代入します。