前編
Rubyを少しでも書けるために最低限知っておく必要な知識 前編
メソッド
Rubyのメソッドは3種類に分けることができる
-
インスタンスメソッド
もっとも一般的なメソッド -
クラスメソッド
レシーバがインスタンスではないメソッド -
関数的メソッド
レシーバーがないメソッド
※ 実際にレシーバがないわけではないが、今回はないと表現する。
※ インスタンスの説明はクラスでする。
インスタンスメソッド
あるオブジェクト(インスタンス)があったときに、そのオブジェクトをレシーバというものをメソッドと言う。
オブジェクトに対してどのようなインスタンスメソッドを使うかはオブジェクトの種類(クラス)に決められている。
文字列のオブジェクトが属しているクラス String
数値のオブジェクトが属しているクラス Numeric
配列のオブジェクトが属しているクラス Array
ハッシュのオブジェクトが属しているクラス Hash
person = Person.new
person.hogehoge # オブジェクト(インスタンス).インスタンスメソッド
クラスメソッド
レシーバがインスタンスではなくクラスそのもだった場合、そのメソッドはクラスメソッドとなる
numbers = Array.new # オブジェクト(インスタンス) = クラス.クラスメソッド
関数的メソッド
関数的メソッドは、レシーバの状態によって結果が変わることがないように作られている。printメソッドやsleepメソッドなどはレシーバの状態から影響を受けず、同じ結果を出力します。
print 'test'
sleep(10)
メソッドの定義
一般的な構文
def メソッド名(引数1, 引数2, ...) ~ end
インスタンスメソッドやクラスメソッドを定義するには先にクラスの定義が必要である。
クラスの定義をせずにメソッドを定義すると関数的メソッドとして呼び出しがされる。
def hello(name) # def メソッド名(引数)
puts "Hello #{name}" # 実行する文
end
hello('bob') # Hello bob
引数にはデフォルト値を指定することができる。
デフォルト値とは引数を省略してメソッドを呼び出したときに代入される値である。
構文
def メソッド名(引数 = デフォルト値) ~ end
def hello(name='bob') # def メソッド名(引数)
puts "Hello #{name}" # 実行する文
end
hello # Hello bob
引数を省略または引数がない場合は()なしで実行が可能である。
メソッドの結果を戻す処理を書くことが多々ある。
その場合、メソッドの中にreturn文を書くことに実行結果を戻り値として指定することができる。
def add(num,num1)
return num + num1
end
total = add(1, 2)
return文は省略が可能である。その場合、メソッドの中で最後に得られる値が戻り値とある。
def add(num,num1)
num + num1
end
total = add(1, 2)
クラス(class)
オブジェクト指向にとって重要な用語の1つである。
オブジェクトの種類を表すものであり、オブジェクトの振舞を決めるものである。設
計図と例えられることが多い。
そのクラス(設計図)からできるものがインスタンス(オブジェクト)と言われるものである。
新しいインスタンス(オブジェクト)を生成するときは、各クラスのnewメソッドを使う。
配列のインスタンス(オブジェクト)を生成するときはArray.newを使う。
array = Array.new
#または
array = []
クラスを定義する場合、定義名の先頭文字は大文字にする必要がある。
クラスの一般的な構文
class クラス名 ~ end
class Test
end
test = Test.new
モジュール(module)
代表的な使い方として名前空間の提供がある。
名前空間とは、メソッドや定数クラスの名前を区別して管理する単位のことである。
モジュールはそれぞれが独立した名前空間であり、
モジュールAの中のメソッドCとモジュールBの中のメソッドCは別ものとなる。
モジュールを定義する構文
module モジュール名 ~ end
module Test
class Test
end
end
test = Test::Test.new