やったーRuby技術者認定Gold受かったよー\(^o^)/
一週間くらい公式教科書読んで、受けてきました。
75%で合格のところを、76%でした。なんというボーダー。
あと1問間違ってたら落ちてた。
とはいえ合格は合格なので、ありがたく履歴書の資格欄などに書かせていただこうと思います。
で、この資格試験なんだけど、PCに答え入れて結果が瞬時に分かって、超システマティックなのはいいんですが、答え合わせがなかった。/(^o^)\
なのでまだ覚えている悩んだ系の問題を復習しておく。
クラスメソッドの継承
クラスメソッドって継承できたっけ?
class Hoge class << self def hoge "hoge!!!!!" end end end class Fuga < Hoge end Hoge.hoge #=> "hoge!!!!!" Fuga.hoge #=> "hoge!!!!!"
できた。クラスメソッドは継承される!!!
superはincludeされてるモジュールは呼ばれる?
superclassでは出てこないから、呼ばれないと思ってたけど…。
module M def hoge puts "module M" super end end class Hoge def hoge puts "class Hoge" end end class Fuga < Hoge include M def hoge puts "class Fuga" super end end Fuga.new.hoge #=> class Fuga #=> module M #=> class Hoge
げげ呼ばれた…。モジュールもsuperの対象になるのか…。この辺で3問くらいミスった気がするな。
クラス内で別クラスのクラスメソッドが定義できる?
class Hoge def Object.const_missing(name) p "Missing const name is #{name}" end end A #=> "Missing const name is A" Hoge::A #=> "Missing const name is A"
おおやっぱりできるのかー。いつでもどこでも再オープン。
privateは子クラスのsuperで呼べる?
class Hoge private def priv puts "This is private!" end end class Fuga < Hoge def priv super end end Fuga.new.priv #=> "This is private!"
うおお呼べるんだ。super自体がself.を省略した形でもあるし?
Objectクラスで定数を定義すると、トップレベルで定義したのと同じ?
ベタに書くのと同じ?
HOGE = 123 class Object HOGE = 234 end puts HOGE
f.rb:4: warning: already initialized constant HOGE 234
同じでした。
インスタンスメソッドとクラスメソッドのインスタンス変数のスコープ
class Hoge @hoge = 123 def hoge @hoge = 234 end class << Hoge @hoge = 345 def hoge @hoge end end end Hoge.new.hoge #=> 234 Hoge.hoge #=> 123 class << Hoge @hoge end #=> 345 hoge = Hoge.new class << hoge @hoge end #=> nil
うへえ、、、なんというバリエーション。こんなん本当に使うのか?
試験内容以外で気になったところ
- ¥15,000はやっぱり高い…。絶対に負けられない戦いがここにある。
- 公式教科書よりなんかだいぶ難しかった印象。
- マウスのスクロールが問題を表示しただけでは動かなくて、一度画面をクリックしないと反応してくれなかった。
- 選択肢をクリックして回答する試験なので、若干気をつかった。
- シンタックスハイライトがなくて、色づけって重要だなーと思った。
- インデントが半角スペース1個だった。狭い。
- 行番号つけてくれるのはいいんだけど、桁が左寄せなもんだから、10行目から右に1個ずれるという見にくい仕様だった。
- インデントかと思ったら10行目だったというオチ