【Ruby入門】モジュール(module)とMix-in
  • facebookページ
  • twitterページ
  • 2017.12.19

    【Ruby入門】モジュール(module)とMix-in

    本記事ではモジュールとMix-inについて解説します。

    モジュールとは何かを一言で表現すると「処理をまとめたもの」となります。

    前記事で処理をまとめたものとしてクラスを解説しました。同時に、クラスは共通関数ではない!と解説しました。

    一方、モジュールは共通関数に近いです。

    では早速見てみましょう。

    モジュールとは何か

    モジュールとは前述のとおり処理をまとめたものです。

    基本形は、ほぼクラスと同じです。

    実際に定義してみる

    名前を渡してあいさつを返すモジュールを定義してみましょう。

    モジュールの中にsayhelloメソッドを宣言しました。引数を受け取り、その引数を間にはさんで「こんにちは!(引数)さん」と答えてくれます。

    ただし、宣言するだけでは呼び出せません。外部から呼び出せるようにするために、module_functionを使います。

    引数としてメソッド名をシンボルで渡します。

    sayhelloを呼び出してみましょう。

    [実行結果]

    モジュール内のメソッドを呼び出せました。

    また、以下のような書き方もできますので、覚えておくと良いでしょう。

    モジュールの中にクラスや定数

    先ほどの例では、モジュールの中にメソッドを定義しまいた。

    メソッドだけでなく、定数やクラスを宣言することも可能です。

    [実行結果]

    モジュール内の定数呼び出しと、クラスのインスタンス化まで確認できました。

    名前空間

    ここで1つ確認してください。

    先ほどの2つのモジュールで、クラス名もメソッド名も同じなのはお気づきでしょうか?

    SayhelloModule1の中、SayhelloModule2の中それぞれで別世界となっており、同じ名前をつけても衝突しません。

    それぞれの世界を名前空間といいます。

    世界が異なれば、同じ名前でも良いのです。

    モジュールの特性

    クラスと比較したときの、モジュールの特性をまとめました。

    インスタンス化できない

    モジュールはインスタンス化できません。つまり、以下のようなことはできません。

    継承できない

    あるモジュールとわずかに異なる仕様を持つモジュールを作りたいとします。

    クラスであれば継承が使えます。微妙に異なる部分だけ子クラスで定義すればよいのです。

    しかしモジュールでは、継承ができません

    以上のインスタンス化できない、継承できないという2つの「できない」があります。しかし、それを補って余りある特徴があります。

    以降、解説します。

    Mix-in

    クラスにモジュールを取り込むことをMix-inといいます。

    SayhelloClass3に、SayhelloModule3というモジュールをMix-inしてみましょう。

    [実行結果]

    SayhelloClass3の中身は、includeの1行のみですがキチンと動作しています。

    このように、モジュールの中身をそのまま取り込んで、あたかも自クラスの1部分として使うことをMix-inといいます。

    多重継承もどき

    Rubyは、Javaなどと同じように多重継承を許していない言語です。

    つまり2つの親クラスを同時に継承できないのです。

    よって、1つのクラスを継承してしまった後、変更を加えるには子クラスに手を加えるしかありません。

    ところがMix-inを使うと、あたかも親クラスのように振る舞うことができるのです。

    また1度モジュールを定義すれば、他のクラスでも使えるのでとても便利です。

    インスタンスにメソッド追加

    moduleは、すでに生成されたオブジェクトに後から追加することもできます。

    [実行結果]

    すでにできあがったobjに、extendというキーワードを使ってSayhelloModule3を追加できました。

    まとめ

    本記事では、モジュールとMix-inを解説しました。

    クラスとモジュールのちがいや特性をおさえ、効率的なプログラミングができるようがんばってみてくださいね!


    他のRuby入門記事はこちら

    【Ruby入門】Rubyとは何か?学習方法や将来性まで考えました!

    【Ruby入門】Ruby on Railsをやってみよう!

    【Ruby入門】環境構築(Mac/Win)

    【Ruby入門】nokogiriでスクレイピング

    【Ruby入門】データベース

    【Ruby入門】gemとライブラリ

    【Ruby入門】エラーと例外処理

    【Ruby入門】モジュール(module)とMix-in

    【Ruby入門】Procクラスとラムダ(lambda)

    【Ruby入門】ブロック

    【Ruby入門】メソッド

    【Ruby入門】クラスをコーディング(2) オブジェクト指向

    【Ruby入門】クラスをコーディング(1) classを作る

    【Ruby入門】クラスの継承、オーバーライド

    【Ruby入門】クラスとオブジェクト

    【Ruby入門】ディレクトリ(フォルダ)の作成、削除

    【Ruby入門】ファイルの移動、コピー、削除

    【Ruby入門】入力と出力

    【Ruby入門】Rubyの正規表現

    【Ruby入門】正規表現で置換する

    【Ruby入門】正規表現とは何か?

    【Ruby入門】文字列の結合などの操作

    【Ruby入門】CSVの基本と操作

    【Ruby入門】JSONの基本と操作

    【Ruby入門】乱数(Random)などの数値計算用クラスや端数処理

    【Ruby入門】日付の基本と操作(Time, Date)

    【Ruby入門】数値の数え上げ「upto」と四捨五入

    【Ruby入門】文字列の標準ライブラリnkfとヒアドキュメント

    【Ruby入門】数値の基本とメソッド (timesメソッド他)

    【Ruby入門】ハッシュ(hash)をeachで取り出す!その他ハッシュの応用に

    【Ruby入門】ハッシュ(hash)とシンボルの基本

    【Ruby入門】文字列の基本と表示メソッド

    【Ruby入門】Rubyの繰り返しを極める!様々な繰り返しのバリエーション

    【Ruby入門】最初はこれだけ!まずは手を動かしたい人のRuby入門

    【Ruby入門】ifとelseについて

    【Ruby入門】配列と操作(基本編)

    【Ruby入門】eachメソッドの使い方と応用例


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE