コンテンツにスキップ

クラスメソッド

クラスメソッドは、特定のインスタンスではなくクラスやモジュール自身に紐付いたメソッドです。

module CaesarCipher
  def self.encrypt(string : String)
    string.chars.map { |char| ((char.upcase.ord - 52) % 26 + 65).chr }.join
  end
end

CaesarCipher.encrypt("HELLO") # => "URYYB"

クラスメソッドは型名とドットのあとに名前を続ける形式でも定義できます。

def CaesarCipher.decrypt(string : String)
  encrypt(string)
end

クラスもしくはモジュールのスコープではより簡潔に、クラス名の代わりにselfを使う形式でも定義できます。

また、クラスメソッドはModuleを拡張 (extend)することでも定義できます。

クラスメソッドは定義したときと同じ形で呼び出すことができます (CaesarCipher.decrypt("HELLO"))。 同じスコープのクラスメソッドを呼び出す場合は、レシーバとして self を指定する、もしくは暗黙のものとすることができます (encrypt(string) のように)。

コンストラクタ

コンストラクタはクラスのインスタンスを作成する通常のクラスメソッドです。 デフォルトではCrystalのすべてのクラスは new というコンストラクタを少なくとも1つは持ちます。しかし、異なる名前の異なるコンストラクタを定義することも可能です。