7-3-2 クラスに色々な変数を定義して使ってみよう

TaxCalculatorクラスをインスタンス変数を使って記述する

以下のようにTaxCalculatorクラスを定義し、ファイル名をtax_calcurator.rbで保存します。

# 消費税額と税込み額を計算するクラスを定義しよう
class TaxCalculator
  def initialize(price, tax_rate: 0.08)
    @price = price
    @tax_rate = tax_rate
  end

  def execute
    tax = (@price * @tax_rate).to_i
    tax_included = @price + tax
    { tax: tax, tax_included: tax_included }
  end
end

# TaxCalculatorクラスのインスタンスを生成
calculator_8_percent = TaxCalculator.new(100)

# executeメソッドを実行
p calculator_8_percent.execute

# TaxCalculatorクラスのインスタンスを生成
calculator_10_percent = TaxCalculator.new(100, tax_rate: 0.1)

# executeメソッドを実行
p calculator_10_percent.execute

インスタンス変数を使って記述したプログラムを実行する

保存したプログラムを実行します。実行結果に{:tax=>8, :tax_included=>108}{:tax=>10, :tax_included=>110}のハッシュが表示されます。

$ ruby tax_calcurator.rb
{:tax=>8, :tax_included=>108}
{:tax=>10, :tax_included=>110}

TaxCalculatorクラスをクラス変数を使って書き換える

以下のようにTaxCalculatorクラスを書き換え保存します。

# 消費税額と税込み額を計算するクラスを定義しよう
class TaxCalculator
  @@tax_rate = 0.08

  def initialize(price)
    @price = price
  end

  def execute
    tax = (@price * @@tax_rate).to_i
    tax_included = @price + tax
    { tax: tax, tax_included: tax_included }
  end

  def change_tax_rate(tax_rate)
    @@tax_rate = tax_rate
  end
end

# TaxCalculatorクラスのインスタンスを生成
calculator_100 = TaxCalculator.new(100)

# executeメソッドを実行
p calculator_100.execute

# 税率を変更するメソッドを呼び出し
calculator_100.change_tax_rate(0.1)

# executeメソッドを実行
p calculator_100.execute

# TaxCalculatorクラスのインスタンスを生成
calculator_200 = TaxCalculator.new(200)

# executeメソッドを実行
p calculator_200.execute

クラス変数を使って修正したプログラムを実行する

修正したプログラムを実行します。実行結果に{:tax=>8, :tax_included=>108}{:tax=>10, :tax_included=>110}{:tax=>20, :tax_included=>220}のハッシュが表示されます。

$ ruby tax_calcurator.rb
{:tax=>8, :tax_included=>108}
{:tax=>10, :tax_included=>110}
{:tax=>20, :tax_included=>220}

TaxCalculatorクラスを定数を使って書き換える

以下のようにTaxCalculatorクラスを書き換え保存します。

# 消費税額と税込み額を計算するクラスを定義しよう
class TaxCalculator
  TAX_RATE = 0.08

  def initialize(price)
    @price = price
  end

  def execute
    tax = (@price * TAX_RATE).to_i
    tax_included = @price + tax
    { tax: tax, tax_included: tax_included }
  end
end

# TaxCalculatorクラスのインスタンスを生成
calculator_100 = TaxCalculator.new(100)

# executeメソッドを実行
p calculator_100.execute

# TaxCalculatorクラスのインスタンスを生成
calculator_200 = TaxCalculator.new(200)

# executeメソッドを実行
p calculator_200.execute

# 定数を参照
p TaxCalculator::TAX_RATE

# 定数を変更
TaxCalculator::TAX_RATE = 0.1

# 定数を参照
p TaxCalculator::TAX_RATE

定数を使って修正したプログラムを実行する

修正したプログラムを実行します。実行結果に{:tax=>8, :tax_included=>108}{:tax=>16, :tax_included=>216}0.08が表示された後、TaxCalculator::TAX_RATEが既に定義済であるワーニングメッセージが表示され、その後0.1が表示されます。

$ ruby tax_calcurator.rb
{:tax=>8, :tax_included=>108}
{:tax=>16, :tax_included=>216}
0.08
tax_calcurator.rb:32: warning: already initialized constant TaxCalculator::TAX_RATE
tax_calcurator.rb:3: warning: previous definition of TAX_RATE was here
0.1

irbで定数を定義する

irbを起動し、定数TAX_RATEを定義します。実行結果に0.08が表示されます。

irb(main):001:0> TAX_RATE = 0.08
=> 0.08

定数を変更する

定義済の定数TAX_RATEを変更します。実行結果に定数が定義済である警告が表示された後、0.1が表示されます。

irb(main):001:0> TAX_RATE = 0.08
=> 0.08
irb(main):002:0> TAX_RATE = 0.1
(irb):2: warning: already initialized constant TAX_RATE
(irb):1: warning: previous definition of TAX_RATE was here
=> 0.1

再定義した定数を参照する

再定義した定数を参照します。実行結果に0.1が表示されます。

irb(main):003:0> TAX_RATE
=> 0.1