メソッドの利用例

もう少し複雑なメソッドを定義してみよう。

消費税計算

金額を渡すと消費税を計算するメソッドを作成してみよう。 税率として「10%固定」というのでは安物電卓と変わらなくて悔しいので 税率も選べるようにしよう。

tax-1.rb

#!/usr/koeki/bin/ruby
# coding: utf-8

def tax(price, ratio)   # priceに値段、ratioに税率 をもらう
  charge = price*ratio
  charge.to_i
end

ここで定義したtaxメソッドを 参照するときは、第1引数に金額、第2引数に税率を指定する。

tax(250, 1.10)

これでtaxメソッドで price=250, ratio=1.10 となり、税率10%で計算した結果を返してくれる。

引数のデフォルト値

特に何も指定しなければ採用される値のことをデフォルト値という。 たとえば、消費税は大抵の場合10%だが、食料品など特定商品にに軽減税率 8%が適用されたり、金券のように非課税(0%)となるものもある。 税率を指定しなかったら10%(1.10)ということにしておく のように メソッド定義デフォルト値を定めることができる。次のようにする。

def tax(price, ratio=1.10)   # priceに値段、ratioに税率 をもらう
  charge = price*ratio       # ratioを省略したときは 1.10
  charge.to_i
end

このように、仮引数の変数の後に 「=値」を書くと、 それが引数を省略した場合のデフォルト値になる。実際に次のプログラムを 動かしてみよう。

tax-2.rb

#!/usr/koeki/bin/ruby
# coding: utf-8

def tax(price, ratio=1.10)   # priceに値段、ratioに税率 をもらう
  charge = price*ratio       # ratioを省略したときは 1.10
  charge.to_i
end

STDERR.print "税抜き価格はいくらですか?: "
price = gets.chomp!.to_i

printf("消費税5%%だと %d 円になります.\n", tax(price))
printf("でも消費税8%%だと %d 円になるんですよ.\n", tax(price, 1.08))

引数省略時のデフォルト値は、引数リストの後ろの方からしか使えない。

def tax(price=1000, tax=1.1)
def tax(price, tax=1.10)
×def tax(price=100, tax)
×def foo(x=3, y=2, z)
def foo(x, y=2, z=3)
×def foo(x, y=2, z)

なぜなら、定義したメソッドを呼ぶときには引数を順番通り渡さねばならな いため、前の方の引数を省略して後ろの引数を指定することはできないからである。

メソッドに配列を渡す例

配列をメソッドに渡すこともできる。次のメソッドは、 数値が複数入っている配列を受け取り、それらの値の平均値を求めるものである。

def average(score)	# scoreは数値のたくさん入っている配列
  sum = 0.0		# 割り算する予定なので浮動小数点数にしておく
  score.each do |x|
    sum += x
  end
  sum/score.length
end

これを利用して、入力した数値全ての平均値を出力するプログラム を作ると以下のようになる。

average.rb

#!/usr/koeki/bin/ruby
# coding: utf-8

def average(score)	# scoreは数値のたくさん入っている配列
  sum = 0.0		# 割り算する予定なので浮動小数点数にしておく
  score.each do |x|
    sum += x
  end
  sum/score.length
end

points=[]		# からっぽの配列を作る
i=0			# iがpointsの添字となる
while true
  STDERR.print "数値を入力して下さい: "
  line=gets
  if line == nil
    break
  end
  points[i] = line.chomp!.to_f
  i += 1
end

printf("\n平均値は %6.2f です\n", average(points))

実際に実行してみよう。データの入力の最後には[C-d]を タイプする。

% ./average.rb
数値を入力して下さい: 1
数値を入力して下さい: 2
数値を入力して下さい: 3
数値を入力して下さい: 4
数値を入力して下さい: [C-d]
平均値は   2.50 です

本日の目次