Ruby クラスを使う場合と使わない場合の比較

やりたいこと

Rubyでプログラムを作成していた時、クラスを使うメリットを発見したので記載します。


クラスを使わないで実装

users = []
users << { first_name: 'コナン', last_name: '江戸川' }
users << { first_name: '', last_name: '灰原' }

def full_name(user)
  "#{user[:first_name]} #{user[:last_name]}"
end

users.each do |user|
  puts '氏名': "#{full_name(user)}"
end

特に問題なく処理は実行されるのですが、ハッシュは新しくキーを追加したり、内容を変更したりできるので「脆くて壊れやすいプログラム」になりがち。大きなプログラムならなおさらですね。そこでクラスが使われます。


クラスを使って実装

class User
  attr_reader :first_name, :last_name

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

  def full_name
     "#{first_name} #{last_name}"
  end
end

users = []
users << { first_name: 'コナン', last_name: '江戸川' }
users << { first_name: '', last_name: '灰原' }

users.each do |user|
  puts '氏名': "#{full_name(user)}"
end

クラスにすることによっていいメリット

# 勝手に属性を追加できない
users[0].adult = '工藤新一'

# 勝手にfirst_nameを変更できない
users[0].first_name = '小五郎'

クラスはこのように、内部にデータを保持し、自分が保持しているデータを利用する独自のメソッドを持つことができます。データとそのデータに関するメソッドが常にセットになる。プログラムが大規模になる程、データとメソッドを一緒に持ち運べるクラスのメリットが大きくなります。