【クラス、イニシャライズ、アクセサ】Rubyの基礎【学習】

Ruby_logoRuby

今回は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

フリーランスを目指すなら【テックパートナーズカレッジ】

未経験者向けWEBスクール【SHElikes】

コメント

タイトルとURLをコピーしました