【Ruby】includeメソッドとinclude?メソッドの違い
こんにちは😊Kintarouです。
現在エンジニア転職を目指してTECH CAMPにてプログラミング学習中です👨🎓
夢はフリーランスエンジニアになって働く人が働きやすいシステムを作ること!
と、愛する妻と海外移住すること🗽
プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry
そもそもincludeって?
学習中にincludeが出てくる度に「include」ってなんだっけ?となるのでまとめてみました。日本語で言うと「含める」という意味なのですが、抽象的すぎて「具体的にどういうことをしてくれるメソッドなの?」となってしまっておりました。
かつ、最後に「?」が付くかどうかで使う場面や意味合いも全然違うので余計知識として定着しにくかったのだと思います...(私だけ?)
include?メソッド
説明が簡単なのでまず「?」付きのこちらから。
まず「?」で終わるメソッドは慣習的に”真偽値”を返すメソッドとなります。
include?メソッドは引数の値が”含まれているかどうか”を真偽値で返すメソッドです。
array = [1, 2, 3, 4] array.include?(3) #=> true array.include?(5) #=> false str = "abcdef" str.include?("a") #=> true str.include?("def") #=> true str.include?("fgh") #=> false str.include?("cba") #=> false #c,b,aはそれぞれ含まれているが"cba"という文字列は含まれていないため
includeメソッド
こちらは『クラス』に『モジュール』を"含ませる"ためのメソッドです。
念のため『クラス』と『モジュール』を簡単におさらい。
クラスとは
オブジェクトを作る設計図の事。形を持たず、概念のようなもの。
クラスにより生成されたオブジェクトはそのクラスの『インスタンス』と呼ばれる。
インスタンスはクラスに設定されたふるまい(メソッド)を使用できる。
例えば「人間」がクラスとすると、『太郎さん』や『次郎さん』は「人間」クラスのインスタンスとなります。
「人間」に(挨拶する)というメソッドが設定されているとすると、「太郎さん」も「次郎さん」も(挨拶する)というふるまいが出来ます。
class Human def hello puts "Hello!" end end tarousan = Human.new jirousan = Human.new tarousan.hello #=>Hello! jirousan.hello #=>Hello!
モジュールとは
モジュールも設計図ですが、こちらは『インスタンス』を生成出来ません。
どういう時に使うかというと、「クラス」は別だが共通のふるまい(メソッド)を持たせたい時に使います。
例えば「人間」クラスとは別に「犬」クラスがあったとして、「犬」クラスのインスタンスである『ハチ』は(挨拶する)というふるまいは出来ませんが、「人間」クラスの『太郎さん』や『次郎さん』のように(走る)というふるまいが出来ます。
ではこの(走る)メソッドはどこに記述すればいいかですが、「人間」クラスにも「犬」クラスにも(走る)メソッドを書くのは面倒です。(今後「猫」クラスや「馬」クラスを作るとなった際にも書く事になるため)
そこで(走る)というふるまいはモジュールにしてしまおうという事です。
module Running def run puts "dash" end end
モジュールをクラスに追加する
ようやく話が戻りますが、このモジュールをクラスに追加する時に使うメソッドがincludeメソッドです。
上記のRunningというモジュールを「人間」クラスと「犬」クラスに追加します。
class Human include Running #モジュールを追加 def hello puts "Hello!" end end class Dog include Running #モジュールを追加 end tarousan = Human.new jirousan = Human.new hachi = Dog.new tarousan.run #=> dash jirousan.run #=> dash hachi.run #=> dash
『ハチ』は『太郎さん』や『次郎さん』とは違うクラスで生成されたインスタンスですが、同じ(走る)というふるまいをすることが出来ました。
以上。どなたかの参考になれば幸いです😊