はじめに
まだ理解が浅いのですが、メモ用に書いてみました。
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>
エラーにならずちゃんと値がかえってきました。