プロを目指す人のためのRuby入門・第8章重要ポイントまとめ
「プロを目指す人のためのRuby入門」の第8章を読み終わりました
個人的に重要と判断したポイントをまとめます。
モジュールはインスタンスの作成と継承ができない
モジュールとクラスの相違点として、
・モジュールからのインスタンスの作成ができない
・他のモジュールやクラスを継承できない
という2点が挙げられます
module Sample1 end #モジュールからインスタンスは作成できない sample = Sample1.new #=> NoMethodError #他のモジュールを継承できない module Sample2 < Sample1 end #=> Syntax Error: syntax error, unexpected '<'
ただし、モジュールに他のモジュールをincludeすることは可能です
module Hello def hello 'hello.' end end module SprHello #モジュールに他のモジュールをincludeする include Hello def spr_hello 'こんちゃ!' end end class User include SprHello end user = User.new user.spr_hello #=> "こんちゃ!" #SprHelloモジュールにincludeしたHelloモジュールのメソッド呼び出しができる user.hello #=> "hello."
モジュール内のメソッドを特異メソッドとしてミックスインする
extendを使うことで、得意メソッドとしてミックスインすることができます
#モジュールの定義はincludeの時と同じ module Loggable def log(text) puts "[LOG] #{text}" end end class Product #Loggableモジュールのメソッドを特異メソッドとしてミックスインする extend Loggable def self.create_products(names) #logメソッドをクラスの特異メソッド内で呼び出す log 'create_products is called.' end end Product.create_products([]) #=> [LOG] create_products is called. #productクラスの特異メソッドとして直接呼び出すことも可能 Product.log('Hello.') #=> [LOG] Hello.
感想
自分で作成したクラスにEnumerableモジュールをincludeしてみようと思ったのですが、eachメソッドの実装方法で詰まってできませんでした…
公式リファレンス読んで実装してみたいです!
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る