クラス内で定数を定義する

クラス内で定数を定義することが出来ます。定数はアルファベットの大文字で始まる定数名に対して一度だけ値を格納することができ、クラス内およびクラス外から参照することができます。ここでは Ruby でクラス内で定数を定義する方法について解説します。なお定数について詳しくは「定数」を参照して下さい。

(2021 年 06 月 30 日公開 / 2022 年 10 月 16 日更新)

クラスで定数を定義する

クラスで定数を定義する場合は通常の定数と同じく次のように定義します。定数名は大文字で始める必要があり、すべて大文字で記述する場合が多いようです。

定数 = オブジェクト

下記では SHOUHIZEI という定数を定義しています。

class Reji
  SHOUHIZEI = 0.1

  def initialize(init=0)
    @sum = init
  end
  
  def kounyuu(kingaku)
    @sum += kingaku
  end
  
  def goukei()
    return @sum * (1 + SHOUHIZEI)
  end
end

reji = Reji.new(0)
reji.kounyuu(100)
reji.kounyuu(80)
puts(reji.goukei())

なおメソッドの中では定数は定義できません。

クラスの外から定数を参照する

クラス内で定義された定数は、次のように記述することでクラスの外から参照することができます。

クラス名::定数名

クラス名の後にコロンを 2 つ重ねて定数名を記述します。例えば先ほどのサンプルであれば次のように記述します。

puts(Reji::SHOUHIZEI)

なお :: はメソッドの場合の呼び出しでも使用できる方法ですが、メソッドのように . だけを使って「クラス名.定数名」のようには使用できませんので注意して下さい。

一度値を代入した定数に別の値を代入する

定数は変数と異なり一度代入した値をあとから変更して利用するものではありませんが、 Ruby では定数に対してあとから別の値を代入して変更することが可能です。ただし、警告が表示されます。

次の例を見てください。クラスの中で一度定義した定数に対して、あとから別の値を代入しています。

class Reji
  SHOUHIZEI = 0.8
end

reji = Reji.new()

puts(Reji::SHOUHIZEI)
Reji::SHOUHIZEI = 0.1
puts(Reji::SHOUHIZEI)

実行すると次のような警告が表示されます。

0.8
warning: already initialized constant Reji::SHOUHIZEI
warning: previous definition of SHOUHIZEI was here
0.1

警告は表示されますが、定数の値は変更されている点にご注意ください。

サンプルコード

では実際に試してみます。

# encoding: UTF-8

class Reji
  SHOUHIZEI = 0.1

  def initialize(init=0)
    @sum = init
  end
  
  def kounyuu(kingaku)
    @sum += kingaku
    puts("お買い上げ:" + kingaku.to_s)
  end
  
  def goukei()
    return @sum * (1 + SHOUHIZEI)
  end
end

reji = Reji.new(0)
reji.kounyuu(100)
reji.kounyuu(80)

puts("合計金額:" + reji.goukei().to_s)
puts("消費税率:" + Reji::SHOUHIZEI.to_s)

上記を実行すると次のように表示されます。

クラス内での定数

-- --

Ruby でクラス内で定数を定義する方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。