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