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
クラスに対してメソッドを定義することができる。
この記事が気に入ったらサポートをしてみませんか?