diff --git a/cherry.txt b/cherry.txt index 1522b31..6944c57 100644 --- a/cherry.txt +++ b/cherry.txt @@ -270,12 +270,27 @@ extend:モジュール内のメソッドをそのクラスの特異メソッ 例題を通して:リファクタリングの一部を先に実践できたところにほのかな成長を感じた include_modules:includeされているモジュールの配列が返る ancestors:モジュールのみならずスーパークラスの情報も返る - 333ページから - - - - +## 3/28 +Enumerableモジュール:配列やハッシュ、範囲など、何かしらの繰り返し処理ができるクラスにincludeされているモジュール。map、select、find、countなどのメソッドが定義されている。eachメソッドを実装していれば使えるようになる +Comparableモジュール:比較演算を可能にするモジュール。include先のクラスで<=>演算子を実装すると使用可能になる。 +Kernelモジュールの秘密:ObjectクラスがKernelモジュールをincludeしているのでどこでも使える +トップレベル:クラス構文やモジュール構文に囲まれていない一番外側をトップレベルと言う。ここではmainという名のObjectクラスのインスタンスがselfとして存在している +クラス以外のオブジェクトにextendする:この場合、モジュールのメソッドはextendしたオブジェクトの特異メソッドになる +トップレベルにメソッドを定義すると:Objectクラスに定義される。つまりトップレベルに定義したメソッドは事実上のグローバルメソッドになる +名前空間としてのモジュール:モジュール構文の中にクラス定義を書くと「そのモジュールに属するクラス」という意味になるので、同名のクラスがあっても名前の衝突は発生しなくなる +入れ子なしで名前空間付きのクラスを定義する:名前空間として使うモジュールがすでにどこかに定義されている場合は、モジュール構文やクラス構文を入れ子にしなくてもモジュール名::クラス名のような形でクラスを定義することもできます +クラスの探索:Rubyではクラスやモジュールの入れ子関係を順に外側に向かってクラスを探索する +モジュールに特異メソッドを定義する:モジュール単体でそのメソッドを呼び出したい時、モジュール自身に特異メソッドを定義すれば直接モジュール名.メソッド名の形式でメソッドを呼び出すことができる +module_functionメソッド:モジュールではミックスインとしてもモジュールの特異メソッドとしても使えるメソッドをこれで定義できる +↑module_functionメソッドを引数なしで呼び出した場合は、そこから下に定義されたメソッドがすべてモジュール関数になる +Mathモジュールに定義されている定数:自然対数の底を表すMath::Eと円周率を表すMath::PIがそれぞれ定義されている +シングルトンパターン:アプリケーション内で唯一のオブジェクトを作る手法のことをシングルトンパターンと呼ぶ +メソッドが探索される順番:直近のクラス➜内部のモジュール➜スーパークラス➜Objectクラス➜Kernalモジュール➜BasicObject +prepend:include以外の方法でメソッドをミックスインする方法。同名のメソッドがあったときにミックスインしたクラスよりも先にモジュールのメソッドが呼ばれる +refinements:独自のスコープを設定できる。有効にするにはusingというメソッドを使う。通常はクラス構文とモジュール構文の内部で使う。トップレベルでも使用できるが、有効範囲はusingが呼び出された場所からファイルの最後までになる +二重コロンとドットの違い:名前空間を区切ったり定数を参照したりするときは二重コロンを使い、メソッドを呼び出す場合はドットを使うのが典型的な使い分け。ただしメソッドの呼び出しに関しては二重コロンも使おうと思えば使える。逆はできない +366ページから