0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ruby モジュール

Posted at
  • 対象者

  • Ruby初心者.

この記事を読んでわかること

モジュールとは何か、モジュールの使い方。

目次

  1. モジュールとは.

  2. クラスとモジュールの違い.

  3. モジュールの使用用途.

  4. 名前空間の提供

  5. インスタンスメソッドとして取り込む(Mix-in)

  6. モジュールをオブジェクトに取り込む

モジュールとは.

→メソッドを集めたもの.
それとってクラスじゃないの?と思ったのは私だけでしょうか?
モジュール↓

module Salary 
 def calculate_salary
 
 end 

 def kihon
  
 end 

 def teate 

 end 

クラスとほとんど同じやん‥.

class クラス名 

で定義するところが

module モジュール名

に変わっただけやん‥だがしかし

1. クラスとモジュールの違い.

スクリーンショット 2023-04-04 22.33.54.png

簡単に比較してみるとクラスの劣化版のような印象を受けました。この時点でモジュールを使う理由がないと感じたのは私だけでしょうか? しかし

1. モジュールの使用用途

  • 名前空間の提供

  • インスタンスメソッドとして取り込む(Mix-in)

  • クラスメソッドとして取り込む

  • モジュールをオブジェクトに取り込む

1. 名前空間の提供

名前空間の提供とは?
⇨同じ名前のメソッドやクラス名を使えるようにする機能.


module Person
  class Student
    def self.say
      puts "I'm Ken."
    end
  end
end
 
class Student
  def self.say
    puts "私はケンです"
  end
end
 
Person::Student.say
#=> "I’m Ken."
 
Student.say
#=> 私はケンです

module モジュール名でクラスを入れ子構造にすることで下のStudentクラスとは別のメソッドだと表現している。

#1. インスタンスメソッドとして取り込む(Mix-in)
→モジュール内で定義したメソッドをクラスの中にインスタンスメソッドとして取り入れることができる=Studentクラスでgreetメソッドが使用できる
スクリーンショット 2023-04-04 21.56.54.png

クラス内で

include モジュール名

と定義すれば使えるようになる.
↓こんな風にインスタンスメソッドとして使用できる。

student = Student.new

student.greet
→puts ”こんにちは”と出力される

モジュールをオブジェクトに取り込む

特異メソッドとして取り込むこともできます。


class Greet
  def say
    puts "Hello"
  end
end 
obj = Greet.new
obj2 = Greet.new

#↓特異メソッドという。オブジェクト.メソッド名で定義する
def obj.hi  
  puts "よろしく"
end 
 

puts obj.hi ⇨よろしく
puts obj2.hi⇨エラー
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?