loadとrequireとincludeとextendの違い

今日はメタプログラミングRubyの輪読会でした!

個人的にloadとrequireとincludeの違いについて整理しておきたくなったので書いておこうと思います!

 

loadとrequireとincludeとextendの違い

load

loadはKernelのメソッドです。

ファイルを読み込みます。

同じファイルを何回もロードできます。

 

docs.ruby-lang.org


require

requireはKernelのメソッドです。

ライブラリを読み込みます。(loadと違ってただのテキストファイルなどは不可)

一度読み込んだら再度読み込む事はしません。(二度目以降はrequireするとfalseが返る)

docs.ruby-lang.org


include

includeはModuleのメソッドです。

includeされたモジュールのインスタンスメソッドはincludeしたクラスのインスタンスメソッドとして使用できるようになります。

docs.ruby-lang.org


extend

extendはObjectクラスのメソッドです。

extendされたモジュールのメソッドはextendしたクラスのクラスメソッドとして使用できるようになります。

 

docs.ruby-lang.org

 

 

 比較表

 

メソッドのクラス

メソッドの機能

load

Kernel

ファイルを読み込み実行する

require

Kernel

ライブラリを読み込み使える状態にする

include

Module

インスタンスメソッドを生やす

extend

Object

クラスメソッドを生やす

 

 


感想その他

requireは一度しかできないという話の流れで、

$LOADED_FEATURESでrequireしてあるライブラリが取得できるというのを知りました!!面白い!!

irb(main):001:0> p $LOADED_FEATURES

["enumerator.so","thread.rb","rational.so","complex.so","/Users/hayashiyoshino/.rbenv/versions/2.6.1/lib/ruby/2.6.0/x86_64-darwin18/enc/encdb.bundle”,…..]