#initializeメソッドについて
p28より。
initialize は特殊なメソッドです。BookInStock.new を呼び出して新しいオブジェクトを生成す
ると、Ruby はいくらかメモリを割り当て、そこに初期化されていないオブジェクトを保持します。そし
て、そのオブジェクトの initialize メソッドを呼び出します。その際、newに渡された引数をすべて
initialize に渡します。
class BookInStock
def initialize(isbn, price)
@isbn = isbn
@price = Float(price)
end
end
book = BookInStock.new("12345", 500)
p book
#<BookInStock:0x000000021e8b40 @isbn="12345", @price=500>
#属性の読み書き
p32より。
#読み取り専用
attr_reader :isbn
#読み書き可
attr_accessor :price
#仮想属性
p32より。
class BookInStock
attr_accessor :price
def initialize(price)
@price = price
end
def price_in_cents=(cents)
@price = cents / 100.0
end
end
book = BookInStock.new(20)
p book.price
#20
book.price_in_cents = 2000
p book.price
#20
#変数名とクラス、定数名
p17より。
変数名の先頭の文字でスコープが異なる。
また、クラス、定数名は大文字始まりで大文字区切り。
#ローカル
hoge
#グローバル
$hoge
#インスタンス
@hoge
#クラス
@@hoge
#クラス、定数名
HogeHoge
#シンボル
p19より。
シンボルとは、事前に宣言する必要がなく、なおかつ一意であることが保証される定数名のことです。
:hoge
#privateメソッドについて
p37より。
明示的なレシーバを指定して呼び出すことはできません。レシーバは常に自分自身(self)です。
#アクセス制御の記法
p37〜38より。
class Hoge
# 何も指定しない場合はpublic
def hoge1
end
protected
def hoge2
end
private
def hoge3
end
public
def hoge4
end
end
class Hoge
def hoge1
end
def hoge2
end
def hoge3
end
def hoge4
end
# まとめて指定することも可能
public :hoge1
protected :hoge2
private :hoge3 :hoge4
end
#変数について
p39〜41より。
変数はオブジェクトでしょうか。
Ruby では、答えは「ノー」です。変数は単にオブジェクトへの リファレンスにすぎません。
オブジェクトは大きなプール(多くの場合ヒープ)の中に浮かんでおり、変数によって参照されます。
hoge1 = "hogehoge"
hoge2 = hoge1
p hoge1
#hogehoge
p hoge2
#hogehoge
hoge1[0] = "f"
p hoge1
#fogehoge
p hoge2
#fogehoge
# freezeメソッド他から変更できないようにできる
hoge1.freeze
#配列の添字
p43〜44より。
配列にはマイナスの添字もある。
arr = [1, 2, 3]
for hoge in 0..(arr.count - 1) do
p arr[hoge]
end
#1
#2
#3
#負数の添字
for hoge in (arr.count * -1)..-1 do
p arr[hoge]
end
#1
#2
#3
範囲を指定することも可能。
arr = [1, 2, 3]
p arr[1..2]
# [2, 3]
開始位置と個数を指定することも可能。
arr = [1, 2, 3]
p arr[1, 2]
# [2, 3]