Rubyのメソッドについて学ぶ
メソッドとは、「処理の部品」に名前をつけたもの
慣習的には、全て小文字のスネークケースにする
メソッドの中で、returnが実行されないときは、最後に実行した処理が戻り値になる
メソッド呼び出しにおける引数の()は省略されることが多い
p 1は、p(1)の()を省略した書き方
メソッド定義の引数の()はあまり省略されないことが多い
引数が0個のメソッド定義では、引数の()は省略されることが多い
メソッドの引数に、デフォルト値を指定することができる
キーワード引数を使うと、メソッドを呼び出すときに 引数を名前(キーワード)つきで指定できる
キーワード引数は、引数の順序を変えても呼び出せる。
レシーバとは、メソッドを呼び出すオブジェクト(.の前に書かれるもの)
インスタンスメソッドとは、レシーバが「インスタンス(あるクラスのオブジェクト)」であるメソッド
クラス名#メソッド名 で表現
クラスメソッドとは、レシーバが「クラス」であるメソッド
Ruby におけるクラスメソッドとはクラスの特異メソッドのことです。
クラス名.メソッド名 で表現
クラス内であれば、self.メソッド名 で表現 (selfはクラス名を書くのと同じ)
複数のクラスメソッドをまとめて定義する時は、class << selfまたはcalss << クラス名で表現
private なクラスメソッドを定義する時は、defの前にprivate_class_methodと書く
オブジェクトが持つ「動作」や「振る舞い」をメソッドと呼ぶ
何らかの処理をひとまとめにして名前をつけ、再利用できるようにする
メソッドを実行することは、レシーバに対してメッセージを送るということ
オブジェクト名という「レシーバ」に対して、メソッド名という「メッセージ」を送る
一見演算子を使っているように見えて、実はメソッドして定義されているものがある
左辺はレシーバ、右辺は引数として渡すオブジェクト
演算子式のメソッドを再定義 (上書き) して使うことがある
Object#==:引数で渡したオブジェクトがレシーバと同じオブジェクトであればtrue、そうでなければfalseを返す Module#===:引数で渡したオブジェクトが、レシーバのクラス (サブクラスを含む) のインスタンスであればtrue、そうでなければfalseを返す code:sample.rb
Array === Array.new #=> true Class === Array.new #=> false Array === Class #=> false 主に case 文での比較に用いられる (when節の値がレシーバ)
普通は使わないが、様々なオブジェクトを受け取って条件分岐するような場合に役立つ
メソッドの中で、渡される引数に応じた処理を書くというやり方をする
引数のデフォルト値を指定したり、可変長引数を使うことで、引数の受け取り方を柔軟にできる
その他
真偽値( true / false ) を返すメソッド名の末尾には、?が使われる
code:method.rb
# 引数のないメソッド
def hello
puts "Hello, world!"
end
# 引数のあるメソッド
def foo(a, b) # 括弧を省いてdef foo a, bとも
a + 3 * b
end
def foo(x, y = 1) # 2番目の引数yにデフォルト値を指定
10 * x + y
end
p foo #=> ArgumentError (wrong number of arguments) # キーワード引数のあるメソッド
def foo(x:, y: 1)
10 * x + y
end
puts order(y: 5, x: 1) #=> 15