LoginSignup
6
6

More than 5 years have passed since last update.

Rubyを少しでも書けるために最低限知っておく必要な知識 後編

Last updated at Posted at 2015-12-14

前編

Rubyを少しでも書けるために最低限知っておく必要な知識 前編

メソッド

Rubyのメソッドは3種類に分けることができる

  • インスタンスメソッド
    もっとも一般的なメソッド

  • クラスメソッド
    レシーバがインスタンスではないメソッド

  • 関数的メソッド
    レシーバーがないメソッド
    ※ 実際にレシーバがないわけではないが、今回はないと表現する。

※ インスタンスの説明はクラスでする。

インスタンスメソッド

あるオブジェクト(インスタンス)があったときに、そのオブジェクトをレシーバというものをメソッドと言う。
オブジェクトに対してどのようなインスタンスメソッドを使うかはオブジェクトの種類(クラス)に決められている。

文字列のオブジェクトが属しているクラス String
数値のオブジェクトが属しているクラス Numeric
配列のオブジェクトが属しているクラス Array
ハッシュのオブジェクトが属しているクラス Hash

instance.rb
person = Person.new
person.hogehoge # オブジェクト(インスタンス).インスタンスメソッド

クラスメソッド

レシーバがインスタンスではなくクラスそのもだった場合、そのメソッドはクラスメソッドとなる

classmethod.rb
numbers = Array.new # オブジェクト(インスタンス) = クラス.クラスメソッド

関数的メソッド

関数的メソッドは、レシーバの状態によって結果が変わることがないように作られている。printメソッドやsleepメソッドなどはレシーバの状態から影響を受けず、同じ結果を出力します。

function_method.rb
print 'test'
sleep(10)

メソッドの定義

一般的な構文
def メソッド名(引数1, 引数2, ...) ~ end

インスタンスメソッドやクラスメソッドを定義するには先にクラスの定義が必要である。
クラスの定義をせずにメソッドを定義すると関数的メソッドとして呼び出しがされる。

hello.rb
def hello(name) # def メソッド名(引数)
    puts "Hello #{name}" # 実行する文
end

hello('bob')  # Hello bob

引数にはデフォルト値を指定することができる。
デフォルト値とは引数を省略してメソッドを呼び出したときに代入される値である。
構文
def メソッド名(引数 = デフォルト値) ~ end

hellol_default.rb
def hello(name='bob') # def メソッド名(引数)
    puts "Hello #{name}" # 実行する文
end

hello  # Hello bob

引数を省略または引数がない場合は()なしで実行が可能である。

メソッドの結果を戻す処理を書くことが多々ある。
その場合、メソッドの中にreturn文を書くことに実行結果を戻り値として指定することができる。

method_return.rb
def add(num,num1)
    return num + num1
end

total = add(1, 2)

return文は省略が可能である。その場合、メソッドの中で最後に得られる値が戻り値とある。

method_return.rb
def add(num,num1)
    num + num1
end

total = add(1, 2)

クラス(class)

オブジェクト指向にとって重要な用語の1つである。
オブジェクトの種類を表すものであり、オブジェクトの振舞を決めるものである。設
計図と例えられることが多い。
そのクラス(設計図)からできるものがインスタンス(オブジェクト)と言われるものである。
新しいインスタンス(オブジェクト)を生成するときは、各クラスのnewメソッドを使う。
配列のインスタンス(オブジェクト)を生成するときはArray.newを使う。

class.rb
array = Array.new
#または
array = []

クラスを定義する場合、定義名の先頭文字は大文字にする必要がある。

クラスの一般的な構文
class クラス名 ~ end

class.rb
class Test

end

test = Test.new

モジュール(module)

代表的な使い方として名前空間の提供がある。
名前空間とは、メソッドや定数クラスの名前を区別して管理する単位のことである。
モジュールはそれぞれが独立した名前空間であり、
モジュールAの中のメソッドCとモジュールBの中のメソッドCは別ものとなる。

モジュールを定義する構文
module モジュール名 ~ end

module.rb
 module Test
    class Test
    end
 end

 test = Test::Test.new

参考文献

たのしいRuby 第4版

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6