ruby復習 めも

シンボル

文字列と同じように使うことができる。これらは全て同じものを表す。

{"name" => "doi", "age" => 20}
{:name => "doi", :age => 20}
{name: "doi", age: 20}

シンボルは再利用できるが文字列は再利用できない
シンボル: 一度生成すれば再利用できる
文字列: 利用するたびにメモリ上に新たに文字列が生成される

メソッドの返り値

def add(a, b)
    return a + b
end

returnによってa+bの結果を「返す」ことができる。
「返す」というのは、add(a, b)という関数に結果が宿るということだ。

result = add(1, 3)
p result # 4

もしreturnを使っていなければ、変数resultには値が代入されない。

キーワード引数

def my_info(name:, age:, gender:)
    p (name, age, gender)
end
my_info(name: "doi", age: 20, gender: "male")

引数にシンボル?を用いることで呼び出し時に引数をわかりやすく記述できる。

クラス関連

クラス:設計図
物:インスタンス

attr_accessor

class Menu
    attr_accessor :name
    attr_accessor :price
end

これでmenuクラスにname, priceの情報をもたせる。:nameの部分はインスタンス変数と呼ばれる。

menu1 = Menu.new
menu1.name = "寿司"

これでmenu1インスタンスが完成。

インスタンスメソッド

class Menu
    def show(name)
        return "menu is #{name}"
    end
end

menu1.show(寿司)

インスタンス.関数名(引数)
のように、インスタンスに対して関数を実行するため、インスタンスメソッドと呼ばれる。

selfは指定されたインスタンス自身を指す

class Menu
    def show(name)
        return "menu is #{self.name}"
    end
end

menu1.show

selfはメソッドの対象となるインスタンスのことを指している。ここでは、selfがmenu1で、self.nameはmenu1のname、つまり寿司を表す。

initializeメソッド

特別なメソッドで、名前を変更することはできない。
initializeメソッドが定義されているクラスのインスタンスが作成されるたびに呼び出される。

class Menu
    def initialize(name:, price:)
        self.name = name
        self.price = price
    end
end

manu1 = Menu.new(name: "pizza", price: 2000)

インスタンスを生成するnew()の引数とinitialize()の引数は連動している。

クラスの継承

require "./menu"
    class Food < Menu
end

この場合、Foodが子クラス、Menuが親クラスとなる。
子クラスは親クラスからインスタンス変数とインスタンスメソッドを引き継ぐことができる。

food1 = Food.new(name: "ラーメン", price: 1000)

親クラスで定義されていたインスタンス変数やインスタンスメソッドを利用することができる。

子クラスに独自の変数・メソッドを準備する

class Food < Menu
    attr_accessor :taste
    def taste_info()
        puts self.taste
    end
end

メソッドのオーバーライド
親クラスで定義したメソッドと同名のメソッドを子クラスで定義することで、メソッドを上書きすることができる。initialize()の上書きによく使われる。

super
オーバーライドしたメソッドの中でsuper(引数)を呼び出すことで、親クラスの同名のメソッドを呼び出すことができる。

クラスメソッド

class クラス名
    def クラス名.メソッド名()
    end
end

クラスに対してメソッドを定義することができる。

この記事が気に入ったらサポートをしてみませんか?