配列とハッシュ
配列
配列とは他のオブジェクトへの参照を順番に並べたもの。
array = ["a","b","c"] #配列を生成
p array #=>["a","b","c"]
p array[0] #=>"a" #添え字は0から!
array[0] = "z" #添え字0の要素を変更
p array#=>["z","b","c"]
array.push(1) #配列末尾の追加
array << 100 #配列末尾の追加
ハッシュ
ハッシュとはあるオブジェクトを他のオブジェクトへ対応させたもの
key => value という形になる。
ハッシュは以下の3通りで書き表せる。
hash1 = {"名前" =>"太郎"}
hash2 = {:種類=>:犬}
hash3 = {年齢: 19}
メソッド
手続きをモジュール化し再利用するための仕組み
関数的メソッド=非オブジェクト指向的に用いられるメソッド。
def functional(a,b)
return [a,b,a+b]
end
functional(1,2)
メソッドの定義
-def式で表す
def sum(x,y)
x + y
end
sum(1,2) #=> 3
ブロック付きメソッド
def foo_bar_baz
yield "foo"
yield "bar"
yield "baz"
end
foo_bar_baz do |item|
puts item
end
#=>foo
#=>bar
#=>baz
オブジェクトとクラス
例)
class Animal #クラス
def initialize(name)
@name = name
end
def name #getter
return @name
end
def name=(new_name) #setter
@name = new_name
end
end
class Dog < Animal #継承
attr_accessor :cry #アクセサ
def initialize(name) #initialize
super
@cry = cry
end
def self.hello
puts "hello"
end
end
tom = Dog.new("Tom")
クラスの定義
class Animal
......
end
クラスを定義する際に名前の最初は大文字が基本。
クラス内では、計算や、ファイルの読み書きやエンドユーザーとのやりとりが可能。
ただし、多くはインスタンスメソッドで定義する。
インスタンスメソッド,インスタンス化
def ... end : インスタンスメソッド定義
クラス名.new() : インスタンス化
@名前 : インスタンス変数
initialize
インスタンス化した直後に自動的に呼ばれる。
ここでは、初期化処理を行ったり、必要なリソースを確保したりする。
インスタンス変数,クラス変数
@名前:インスタンス変数
@@名前:クラス変数
継承
子クラスが親クラスの特性を引き継ぐ
class Dog < Animal #子クラス名 < 親クラス名
....
end
特異メソッド
def User.hello #クラス名.メソッド名
........
end
特異クラス
-ある特定のインスタンスのためだけにあるクラス
モジュール
モジュール=インスタンス化できないクラス
役割は2つ
1.Mix-in=制限された多重継承
*クラスは1つしか継承できない
*モジュールという「クラスのようだがクラスではない」ものならば何個でも継承できる
2.名前空間
名前の衝突を避けるための機能
class Service
.......
end
module library
class Service
.....
end
end
上側のServiceとmoduleの中にあるServiceは属している場所が違うので、衝突が起こりません。
トップレベルのServiceとLibraryのServiceとなります。