一連の手続きをひとまとめのメソッドとして定義しておけば,プログラムから呼び出して利用することができる.例えば,
method1.rb
# メソッドの定義
def sayHi
puts "Hi!"
end
# メソッドを呼び出す
sayHi()
sayHi()
Hi! Hi!
なお,メソッドは呼び出すよりも前に定義しておかなければならない.よって,次のように記述した場合はエラーが表示される.
method2.rb
# まだ定義していないメソッドを呼び出す(エラーになる)
sayHi()
# ここでメソッドを定義する
def sayHi
puts "Hi!"
end
method2.rb:2:in `<main>': undefined method `sayHi' for main:Object (NoMethodError)
メソッドには
method3.rb
# メソッドを定義する,ただし name は引数
def sayHello(name)
puts "Hello, #{name}!"
end
# 引数を指定してメソッドを呼び出す
sayHello("Rinsaka")
sayHello("Koichiro")
Hello, Rinsaka! Hello, Koichiro!
メソッドに渡す引数が省略された場合のためにデフォルト引数を指定することもできる.
method4.rb
# デフォルト引数を指定してメソッドを定義する
def sayHello(name = "Sato")
puts "Hello, #{name}!"
end
# 引数を指定してメソッドを呼び出す
sayHello("Rinsaka")
sayHello("Koichiro")
# 引数を省略すればデフォルト引数が使用される
sayHello()
Hello, Rinsaka! Hello, Koichiro! Hello, Sato!
値を返すメソッドも定義できる.値を返すには return
を使う.
method5.rb
# 値を返すメソッドを定義する(引数に縦と横の長さを指定すれば長方形の面積を計算して返す)
def menseki(tate, yoko)
s = tate * yoko # s は menseki メソッド内だけで有効なローカル変数
return s
end
# メソッドを呼び出す
s1 = menseki(2, 5)
s2 = menseki(3, 8)
p s1
p s2
10 24
またプログラムが大きくなる場合(行数が多くなる場合),メソッドは別のファイル(ライブラリ)に定義されることが少なくない.自分で作成したライブラリはプログラムと同じフォルダに置き,require_relative
メソッドで読み込めば良い.例えば,「menseki.rb」を「method6.rb」と同じフォルダに作成し,ruby method6.rb と入力して実行する.
menseki.rb
# 値を返すメソッドを定義する
def menseki(tate, yoko)
s = tate * yoko
return s
end
method6.rb
# menseki.rb ライブラリ(外部ファイル)を読み込む
require_relative "menseki" # .rb は省略して良い
# メソッドを呼び出す
s1 = menseki(2, 5)
s2 = menseki(3, 8)
p s1
p s2
C:\Users\lecture\Documents\ruby>ruby method6.rb ⏎
10
24
C:\Users\lecture\Documents\ruby>
さらに,Rubyの標準として準備されているライブラリは require
メソッドで読み込むことができる.