低レベルインフラエンジニアの忘備録

Linux系の各種作業を自分用の忘備録として残しています

【Ruby】クラス

基本的な書き方はこんな感じ

class MyClass
HOGE = 100
end

puts MyClass::HOGE                   ⇒「hoge」と表示

 

(1)クラスの初期化

initializeメゾットを利用します

class MyClass
    def initialize
        puts 'Initialize'
    end
end

obj = MyClass.new                   ⇒「Initialize」と表示

これはオブジェクト指向をかじっていればおなじみのって感じですかね

 

(2)インスタンスメゾット

class MyClass
    attr_accessor :number                  インスタンス変数を操作するために「attr_accessor」を定義

    def hoge
        puts "hoge"
    end
end

 

obj = MyClass.new
puts obj.hoge                         ⇒「hoge」と表示
obj.number = 100
puts obj.number                     ⇒「100」と表示

attr_accessorのようなものはPerlPHPにはなかった(ような気がするので)のでちょっと慣れない感じです。。。 

 

(3)クラスメゾット

class MyClass
    def self.hoge
        puts "hoge"
    end
end
MyClass.hoge            ⇒「hoge」と表示

クラスメゾットの場合は「self.[メゾット名]」になるみたいです。

素朴な疑問でこれを使うケースってどんなケースなんだろう??

インスタンスメゾットでやってしまってもいいような気も。。。。

 

こんな書き方もできるみたいです。

class MyClass
    class << self
        def hoge
            puts "hoge"
        end
    end
end
MyClass.hoge             ⇒「hoge」と表示

この書き方は特異クラスと言うみたいで、クラスメゾットをまとめて書けて、ネストすることでインスタンスメゾットとの区別がしやすいというメリットがあるらしいです。

ただ自分はまだこの書き方のメリットが理解できてません(笑)

 

 (4)クラスの継承

class Car
    def put_class
        puts 'Car'
    end
end

class WagonR < Car
end

puts WagonR.superclass            ⇒「Car」と表示
obj = WagonR.new
obj.put_class                               ⇒「Car」と表示

 「class SubClass < SuperClass」とすればよいみたいです