山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

プロを目指す人のためのRuby入門 その8

第7章 クラスの作成を理解する

オブジェクト指向プログラミングの主要な構成要素であるクラスを使ったプログラミングを行います。

クラスの作成

User クラスは、苗字、名前、年齢 をインスタンス変数に持ちます。

class User
  attr_reader :first_name, :last_name, :age

  def initialize(first_name, last_name, age)
    @first_name = first_name
    @last_name = last_name
    @age = age
  end
end

attr_reader (Module) - Rubyリファレンス

initializeメソッド - クラスの概念 - Ruby入門

initialize() メソッドがコンストラクタのような働きをするんでしょうか。

インスタンスの作成

users = User.new('Alice', 'Ruby', 20)
user.first_name # Alice

クラスメソッド

インスタンスから呼ばれるメソッドとクラスオブジェクトの特異メソッドを定義できます。

class User
  def initialize(name)
    @name = name
  end

  # クラスメソッド
  def self.create_user(names)
    names.map do |name|
      User.new(name)
    end
  end

  # インスタンスメソッド
  def hello
    "Hello, I am #{@name}"
  end
end

names = ['Alice', 'Bob']
users = User.create_user(names)
users.each do |user|
  puts user.hello
end

# これはエラー
User.hello

定数

定数は大文字で始めます。

class Product
  # デフォルトの価格を定数として定義する
  DEFAULT_PRICE = 0

  attr_reader :name, :price

  def initialize(name, price = DEFAULT_PRICE)
    @name = name
    @price = price
  end
end

product = Product.new('A free movie')
puts product.price # 0

感想

クラスメソッドは Java の static メソッドに該当すると思いました。