初めに
「このメソッドの戻り値、どんなクラスに属しているんだ??」
あるあるな状況ですね。今回はそんな時に使える便利なclassメソッドについて紹介しつつ、クイズをしたいと思います。ぱちぱちぱち。
classメソッドとは
前述したように、こやつを使うことで、
簡単にオブジェクトが属しているクラスを確認できます。
ひええ、それは便利だ。それでは早速用例を見ていきましょう。
num1 = 10
p num.class # Integer
num2 = 1.88
p num2.class # Float
str1 = 'あるがままの心で生きようと願うから人はまた傷ついていく。'
p str1.class # String
array = [1, 2, 3, 4, 5]
p array.class # Array
name = {name: "Yamada",age: 26}
p name.class # Hash
ほおお、すごい。。
classメソッドの使い方を理解したので、早速クイズです。
参考:
問題
第一問
以下のオブジェクトmemberが所属するクラスは何でしょうか?
member = Member.where(age: 30, name: "Takashi")
pp member.class
第二問
以下のオブジェクトis_successが所属するクラスは何でしょうか?
is_success = true
pp is_success.class
第三問
以下のオブジェクトhogeが所属するクラスは何でしょうか?
hoge = "nil"
pp hoge.class
回答
第一問
答え:
# Member::ActiveRecord_Relation
joinやwhere, orderなど、ActiveRecord::Relationで定義されているメソッドの戻り値はこのクラスのインスタンスオブジェクトになります。正解できましたでしょうか〜
参考:
第二問
答え:
# TrueClass
booleanだと思った人、結構いるんじゃないでしょうか。。
実はRubyにはbooleanという型は存在しません。
true,falseはそれぞれTrueClass,FalseClassに所属する唯一のインスタンスになります。
参考:
第三問
答え:
# String
NilClassと思った優秀なあなた!! 残念、これはひっかけ問題です。笑
ダブルクオーテーション("")がついているのでString型になります。
終わりに
いかがでしたでしょうか。今回のclassメソッドには、自動テストコードを書く時にかなり助けられました。
関数やメソッドの戻り値などのデータ型を調べ、想定外のバグを生まないためにも積極的に活用したいですね。