Rubyのモジュールとブレンドタイプに関する知識を紹介します

3464 ワード

モジュールは組み合わせられた方法、クラス、定数です.モジュールの2つの主なメリット:
  • モジュールは、名前の競合を回避するネーミングスペースを提供します.
  • モジュールはハイブリッド工場を実現する.

  • モジュールは名前空間を定義し、砂箱の中の方法と定数を自由に使用することができ、他の方法と定数を踏む心配はありません.構文:
    
    module Identifier
      statement1
      statement2
      ...........
    end
    
    

    クラス定数モジュールと命名された定数のように、頭文字は大文字です.定義の方法は似ているように見えますが、モジュール定義の方法はクラスの方法のようです.
    モジュールメソッドを呼び出すには、クラスメソッドと同様に、モジュールの名前の前に定数を参照してモジュールの名前と2つのコロンを使用します.例:
    
    #!/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
    
    

    同じ関数名を定義できますが、異なる機能モジュールでは:
    
    #!/usr/bin/ruby
    
    # Module defined in moral.rb file
    
    module Moral
      VERY_BAD = 0
      BAD = 1
      def Moral.sin(badness)
      # ...
      end
    end
    
    

    クラスのメソッドと同様に、1つのモジュールで定義されたメソッドが、指定されたモジュール名の後ろにポイントが付いている場合、そのメソッドの名前.Ruby require文:
    require文は、C/C++のinclude文とJavaに類似したimport文を宣言します.3番目のプログラムで定義されたモジュールを使用する場合は、Ruby require文でロードされたモジュールファイル:構文:
    require filename
    ここでは必要ありませんrbファイル名拡張.例:
    
    require 'trig.rb'
    require 'moral'
    
    y = Trig.sin(Trig::PI/4)
    wrongdoing = Moral.sin(Moral::VERY_BAD)
    
    

    重要:この2つのファイルには、同じ関数名が含まれています.したがって、これにより、呼び出しプログラムに含まれるコードの曖昧さが発生しますが、モジュールはこのコードの曖昧さを回避し、適切な機能モジュールの名前を呼び出すことができます.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
    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は直接suppoprtに継承されていませんが、Rubyのモジュールにはもう一つの素晴らしい使用があります.彼らは多重継承の必要性をほとんど解消し、混入と呼ばれる工場を提供した.
    ハイブリッドタイプは、素晴らしい制御方法に機能クラスを追加します.コードにクラスをブレンドし、そのコードを使用してインタラクションできます.
    ブレンドタイプについては、次のサンプルコードを見てみましょう.
    
    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は、a 1およびa 2の方法を含む.モジュールBは、方法、b 1およびb 2を含む.クラス例が2つのモジュールAおよびBクラスを含むサンプルは、a 1、a 2、b 1またはb 2の4つのすべての方法にアクセスすることができる.したがって,このクラスは2つのモジュール試料から継承されていることがわかる.したがって,クラスの例は多重継承や混入を示しているといえる.