Ruby超入門 2周目 CHAPTER8-6 クラスを使って メソッドを呼び出す まで

f:id:kkouji0224:20191029231558p:plain

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』
github.com

 

今日はお休みなので寝まくりました!さらに昼寝までしちゃいました!睡眠最高!!koujiです。おはようございます。

 

ってことで今日も振り返っていくぜー!

 

インスタンスメソッドとクラスメソッド

 

インスタンスメソッド
drink.name
[1234].size
1.even?

レシーバ.メソッドのレシーバのところが
インスンタンス(あるクラスのオブジェクト)

クラスメソッド
Drink.new
Array.new

レシーバがクラス名になってるね。
これはクラスに対して呼び出す。

 

インスタンスメソッドはインスタンス(クラスのオブジェクト)に対して呼び出す!

クラスメソッドはクラスに対して呼び出す!クラスそのものに対して呼び出すんだぜ。

 

インスタンス(オブジェクト)とクラスの違いは…

例えば鈴木家には鈴木1くん鈴木2くん鈴木3さんとか何人もいる。

class 鈴木 なわけですよ。で、鈴木1 = 鈴木.newすると1くんが作られるんだ。この鈴木1くんがインスタンスだ。で、鈴木家がクラスだ。鈴木1くんと鈴木家は違うんだ。 

 

クラスメソッドの定義

 

class Fuck
    def self.fuck
        "ファック!!ファック!!"
    end
end

puts Fuck.fuck

 

定義の仕方は簡単だね。self.をつけてあげるとクラス名.メソッド名で呼び出す。Fuckクラスのfuckメソッドでファック!!ファック!!は自分で書いてて笑った。

 

で、インスタンスメソッドとかクラスメソッドをドキュメントに書くときの記法があるみたい。

 

インスタンスメソッド: クラス名#メソッド名

クラスメソッド: クラス名.メソッド名 もしくは クラス名::メソッド名

 

リファレンスマニュアルとかにもこの記法ででてくるので覚えておいて損はないぜ。

 

同じクラスのクラスメソッドを呼び出す

 

class Fuck
    def self.fuck
        "ファック!!ファック!!"
    end
    def self.mother_fuck
        fuck + "マザーファック!!"
    end
    def self.babylon_fuck
        mother_fuck + "国家権力なんか糞食らえだ!!"
    end
end

puts Fuck.babylon_fuck

 

これは簡単で、インスタンスメソッドのときと同じようにメソッド名だけ書けばOKだファック!!ファック三昧にしてみたぜ。勘違いしてほしくないことが1つあるんだ…いつもわけわかんない感じでプログラム書いてるけど、超入門の中身はこんなにわけわかんない感じで書いてないから安心してほしい… 勘違いする人もなかなか居ないと思うので書かなかったけど念の為だ…

 

ちなみにインスタンスメソッドからクラスメソッドを呼び出すこともできるようだ。

 

class Fuck
    def self.fuck
        "ファック!!ファック!!"
    end
    def self.mother_fuck
        fuck + "マザーファック!!"
    end
    def babylon_fuck
        Fuck.mother_fuck + "国家権力なんか糞食らえだ!!"
    end
end

fuck = Fuck.new
puts fuck.babylon_fuck

 

こんな感じね。インスタンスメソッドのbabylon_fuckの中で、Fuck.mother_fuckって書いてクラスメソッドのself.mother_fuckを呼び出してるね。他の書き方としてself.class.mother_fuckって書き方もできるよ。クラス名.クラスメソッド名かself.class.クラスメソッド名ね。

 

ちなみにクラスメソッドを複数書く場合はこっちのほうが楽だね。

 

class Fuck
    class << self
        def fuck
            "ファック!!ファック!!"
        end
        def mother_fuck
            fuck + "マザーファック!!"
        end
    end
    def babylon_fuck
        Fuck.mother_fuck + "国家権力なんか糞食らえだ!!"
    end
end

fuck = Fuck.new
puts fuck.babylon_fuck

 

これね。class << selefからendまでの中に書いたメソッドがクラスメソッドになる感じだね。その外にあるbabylon_fuckはインスタンスメソッドだね。毎回self書かなくていいので便利だし整理されてる感じがして見やすいよね。

 

ってことでCHAPTER8-6の振り返りでした!

 

長くなっちゃうとわかりにくいので分割していこうかなって思ってます。今日はCHAPTER8-7と8も振り返るつもりでっす。

 

その前にご飯かなぁ。ってことで飯くってくるぜ。

 

アディオス!