今回はRubyでクラスを作って、それを使ってみることを説明していこうと思います。
クラスの作り方
クラスを定義する際は「class」と書いた後、キャメルケースでクラス名を記載して、処理を書いて「end」で閉じます。
※キャメルケースとは単語の先頭を大文字で記載して記載することでラクダのコブのようになるためこのように呼ばれます。
Ex) class PostsHelper, class UsersHelper
class User
#処理を記載
end
user1 = User.new
=> #<User:0x00007fdcf186a1c0>
initializeメソッド
initializeメソッドはオブジェクトが生成されるタイミングで自動的に呼ばれます。
以下の例ではUser.newしたタイミングでinitializeメソッドが呼び出されます。
class User
def initialize
puts 'Initializeしました。'
end
end
User.new
->Initializeしました。
=> #<User:0x00007fdcf1061d98>
インスタンス変数
インスタンス変数とは生成されたオブジェクト毎に持つ変数でオブジェクト内のメソッドから参照したり、書き換えたりすることができます。
以下の例を見てください。
「@name」がインスタンス変数です。インスタンス変数では先頭に「@」がつきます。
またインスタンス変数にアクセスするにはインスタンス変数にアクセスするメソッド(アクセサ)を用意する必要があります。
しかし以下の例ではアクセサを準備していない状態で「name」にアクセス使用しているのでエラーが発生します。
class User
def initialize
@name = name
end
end
User.new
book.name
->NameError: undefined local variable or method `book' for main:Object
以下のようにnameを取得するメソッドと書き換えるメソッドを記載してあげます。
class User
def initialize(name = '不明')
@name = name
end
#nameを取得
def name
@name
end
#nameに代入
def name=(new_name)
@name = new_name
end
end
user = User.new
puts user.name
user.name = 'ナベログ'
puts user.name
->
不明
ナベログ
上記のように全てに変数に対して、メソッドを記載してあげるのは大変なので、Rubyには自動でインスタンス変数にアクセスとインスタンス変数を書き換えることができるアクセサメソッドを使うことで簡潔に記載することができます。
class User
attr_accessor :name
def initialize(name = '不明')
@name = name
end
end
user = User.new
puts user.name
user.name = 'ナベログ'
puts user.name
->
不明
ナベログ
initializeメソッドを使わない場合はデフォルトでnilで初期化されます。
class User
attr_accessor :name
end
user = User.new
puts user.name
user.name = 'ナベログ'
puts user.name
->
ナベログ
アクセサ
上記でもアクセサを紹介しましたが、アクセサにも種類があるのでそちらを紹介します。
- attr_accessor =>読み書き可能なメソッド
- attr_reader =>読み取り可能なメソッド
- attr_writer =>書き込み可能なメソッド
class User
attr_accessor :name :age
attr_reader :sex
attr_writer :note
end
コメント