LoginSignup
0
0

More than 3 years have passed since last update.

Rubyのclassの作り方

Last updated at Posted at 2019-07-10

はじめに

まだ理解が浅いのですが、メモ用に書いてみました。

classの作成(インスタンス変数の数分、引数をとる)

rubyでちょとしたメモアプリなどを作成する時とかにclassを使っていたのですが、いつも以下のように書いてました。


class User
  attr_accessor :name, :age, :gender, :admin

  def initialize(name, age, gender, admin)
    @name = name
    @age = age
    @gender = gender
    @admin = admin
  end
end

user = User.new("sakakinn" ,29 ,"男性" ,true)
p user

出力結果↓


#<User:0x00007ff6db152550 @name="sakakinn", @age=29, @gender="男性", @admin=true>

この書き方だとuserを作成した時にキーがなくわかりずらいのかな。
また、以下のように引数の数が足りないとエラーになってしまいます。


class User
  attr_accessor :name, :age, :gender, :admin

  def initialize(name, age, gender, admin)
    @name = name
    @age = age
    @gender = gender
    @admin = admin
  end
end

user = User.new("sakakinn") # nameだけ入力した場合
p user

出力結果↓

Traceback (most recent call last):
        2: from ruby1.rb:12:in `<main>'
        1: from ruby1.rb:12:in `new'
ruby1.rb:4:in `initialize': wrong number of arguments (given 1, expected 4) (ArgumentError)

引数を1つにまとめた場合

paramsにまとめてみました。
上の場合と同じように出力されます。


class User

  def initialize(params)
    @name = params[:name]
    @age = params[:age]
    @gender = params[:gender]
    @admin = params[:admin]
  end
end

user = User.new(name: "サカキ", age: 29 , gender: "男性" , admin: true)
p user

出力結果↓

#<User:0x00007fd49887aa18 @name="サカキ", @age=29, @gender="男性", @admin=true>

@nameにだけ値を渡してみます。


class User

  def initialize(**params)
    @name = params[:name]
    @age = params[:age]
    @gender = params[:gender]
    @admin = params[:admin]
  end
end

user = User.new(name: "サカキ")
p user

出力結果↓

#<User:0x00007fcf6515ea50 @name="サカキ", @age=nil, @gender=nil, @admin=nil>

エラーにならずちゃんと値がかえってきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0