> Ruby – モジュールとミックスイン,Ruby require,Ruby include~RUBY入門〜RUBYTUTORIAL〜 – ネットワークエンジニアチュートリアル

Ruby – モジュールとミックスイン,Ruby require,Ruby include~RUBY入門〜RUBYTUTORIAL〜

スポンサーリンク

無料でプログラマへ!30歳までなら無料でプログラミング学校に通うことが出来ます。下の画像をクリックして無料相談会でGO!

Ruby – モジュールとミックスイン


モジュールとは何か?


モジュールは、メソッド、クラス、および定数をグループ化する方法です。モジュールは2つの大きなメリットをもたらします。

構文

module Identifier
   statement1 
   statement2
   ...........
end
#モジュールは「module」から始まり「end」で終わりとなります。そしてモジュールにはモジュール名を指定します。

#モジュール名はモジュールを識別するための名前で大文字のアルファベットから始まります

#!/usr/bin/ruby

# Module defined in trig.rb file

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

 

Ruby require


requireステートメントは、CおよびC ++のインクルードステートメントとJavaのインポートステートメントに非常に似ています。

構文

require filename

ここでは、.rb拡張子にファイル名を付ける必要はありません。

$LOAD_PATH << '.'

require 'trig.rb'
require 'moral'

y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)
ここでは、$ LOAD_PATH << 'を使用しています。現在のディレクトリでインクルードされたファイルを検索する必要があることをRubyに認識させるためです。$ LOAD_PATHを使用しない場合は、相対ディレクトリのファイルをインクルードするためにrequire_relativeを使用できます。
重要 - ここでは、両方のファイルに同じ関数名が含まれています。したがって、これはプログラムの呼び出しに含まれている間にコードのあいまいさを引き起こしますが、モジュールはこのコードのあいまいさを避け、モジュール名を使用して適切な関数を呼び出すことができます。

Ruby include


モジュールをクラスに埋め込むことができます。モジュールをクラスに埋め込むには、クラス内のincludeステートメントを使用します。

構文

include modulename

モジュールが別のファイルで定義されている場合は、クラスにモジュールを埋め込む前にrequire文を使用してそのファイルをインクルードする必要があります。

support.rbファイルに記述されている次のモジュールを考えてみましょう。

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

今度は、このモジュールを次のようにクラスに含めることができます:

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"

class Decade
include Week
   no_of_yrs = 10
   def no_of_months
      puts Week::FIRST_DAY
      number = 10*12
      puts number
   end
end
d1 = Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

これにより、次の結果が生成されます。

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

Rubyのミックスイン


このセクションを読む前に、オブジェクト指向概念の知識があることを前提としています。

あるクラスが複数の親クラスから機能を継承できる場合、クラスは複数の継承を示すことになっています。

Rubyは複数の継承を直接サポートしていませんが、Rubyモジュールは別の素晴らしい使い方をしています。一挙に、多重継承の必要性をほとんど排除し、ミックスインと呼ばれる機能を提供します。

ミックスインは、クラスに機能を追加するための素晴らしい方法を提供します。しかし、ミックスインのコードが、それを使用するクラスのコードとやりとりを開始すると、その真のパワーが発揮されます。

mixinの理解を得るために、以下のサンプルコードを調べてみましょう。

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end

samp = Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1

モジュールAはメソッドa1とa2で構成されます。モジュールBは、メソッドb1とb2で構成されています。Sampleクラスには、モジュールAとBの両方が含まれています。クラスSampleは、a1、a2、b1、およびb2の4つのメソッドすべてにアクセスできます。したがって、クラスSampleは両方のモジュールから継承していることがわかります。したがって、Sampleというクラスは、複数の継承またはmixinを示しています。

前のページ

次のページ

スポンサーリンク

ネットワークエンジニアになりたければ下記から無料相談会に参加!
なんと無料で授業を受けれてエンジニアになれます

投稿日:

執筆者: