どなブロ

エンジニアァのブログです

たのしいRuby 第7章

.

メソッドの呼び出し

オブジェクト.メソッド名( 引数1, 引数2, … , 引数n ) # ()省略可

ブロック付きメソッド呼び出し

  • eachやloopのようにブロックを伴い呼び出す
  • | ~ |で囲まれた部分を「ブロック変数」という
オブジェクト.メソッド名(引数..) do |変数1, 2, |
  ブロックの内容
end

メソッドの種類

インスタンスメソッド

  • オブジェクトをレシーバとするメソッド

Ex)

10,20,30,40”.split(“,”)
[1,2,3,4].index(2)
1000.to_s

クラスメソッド

Ex)

Array.now()                # 新しい配列を作る
File.open(“some_file”)     # 新しいファイルオブジェクトを作る
Time.now                   # 新しいTimeオブジェクトを作る

関数型メソッド

  • レシーバがないメソッド

Ex)

print “Hello”
sleep(10)

メソッドの定義

def メソッド名(引数1, 引数2, ...)
  実行したい処理
end

※ メソッド名にはアルファベット、数字、「_」を使うことができる。ただし、数字で始めてはいけない。
Ex)

def hello(name)
  puts “Hello, #{name}”
end

hello(“Ruby”)

-> 結果
$ ruby hello_with_name.rb

Hello, Ruby
  • デフォルトの引数を指定することもできる

Ex)

def hello(name="Ruby") # 「変数名=値」で書く
  puts "Hello, #{name}"
end

hello() # 引数を省略して呼び出す
hello("Java") # 引数を指定して呼び出す

-> 結果
$ ruby hello_with_default.rb

Hello, Ruby
Hello, Java

メソッドの戻り値

  • return 値 でメソッドの戻り値を指定できる
  • 省略した場合はメソッド内で得られる最後の値が戻り値となる
  • returnの引数を省略した場合にはnilが返される

ブロック付きメソッドの定義

Ex)

def myloop
  while true
    yield # yieldは呼び出しの際に与えられたブロックを実行する
  end
end

num = 1 # 初期化
myloop do
  puts "num is #{num}
  break if num > 10
  num *= 2
end

-> 結果
$ ruby myloop.rb

num is 1
num is 2
num is 4
num is 8
num is 16

引数の数が不定なメソッド

  • 「*変数名」で定義することで、与えられた引数をまとめて配列として得られる

キーワード引数

  • キーワード引数を使うと引数名と値のペアで引数を渡せる
def メソッド名 (引数1: 引数1の値, 引数2: 引数2の値, …)
  実行したい処理
end