連続でRubyです。
いきなりなんですが最近Ruby技術者認定試験Gold(Ruby Association Certified Ruby Programmer Gold version 2.1)を受験しました。
Rubyの資格ですがSilverとGoldがありGoldはSilverを取らないと認定されません。
Silverは2008年5月に合格していたので実に10年ぶりのRuby受験。
で、今回久しぶりに受けてみようということでGoldを受験しましたがSilver受験当時のプロメトリックIDがすでになくなっていたため新しく取りなおしました。
RexRuby技術者認定試験【Gold】模擬問題
だいたいどのサイトもこの辺りの本とWEBで勉強した、とあるのでこの辺りをもとに勉強しましょう。
私はメタプログラミングRubyは読まずに受験しました。あとRuby公式資格教科書は初版本は記述の誤りが多いのでこちらの改訂版を利用しましょう。
でこれだけで終わると何なので受けたときに出てきた試験問題を覚えている限り出してみます。実は2回受けているので同じものもありました。
(記憶を頼りにしているのであくまでも参考程度で)
・yamlライブラリ
これはyamlライブラリを利用してファイルをどのように読むか?YAML.loadを問われたと思います。
・freeze
Rubyのfreezeメソッドの話、破壊的なメソッドを呼び出すとエラーだが、そうでない場合はエラーにならないので
そのあたりを注意
・コマンドライン引数によるオプション
-r、-lの意味を問われました。
・include、prepend
このあたりは必ずでます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
module M def foo super puts "M" end end class A def foo puts "A" end end class B < A def foo super puts "B" end include M end B.new.foo |
これでincludeの場合、prependの場合でどのような出力されるのかを問われます。
・Rubyのcase文
一致するかどうかはどのように判定されるか?
“===”が答え
・Comparableモジュールをincludeして比較演算子を追加する場合
これは”<=>”(UFO演算子)を定義する
・RubyのFiberクラス
Fiber#resume により子へコンテキストを切り替える
Fiber.yield により親へコンテキストを切り替える
・Date モジュールの>>
次を実行した場合どうなるか?
1 2 3 |
require 'date' d = Date.new(2001,2,3) >> 1 puts d.strftime('%Y-%m-%d') |
これは一月足し算になるので2001-03-03が正解。選択肢では2001-02-04だったり2001-01-03がありました。
・Class.superclass
1 |
p Class.superclass |
これはそのまんまClassのスーパークラスは何か?正解はModule
・ブロック構文do~end
次のうちエラーになるのはどれか?
1 2 3 4 |
1.upto 5 do |x| puts x end 1.upto(5) do |x| puts x end 1.upto 5 { |x| puts x } 1.upto(5) { |x| puts x } |
ブロック引数を{..}で囲む場合は引数の()を省略できません。do~endの場合は省略OK。
なので3つめがエラーになります。
・super構文
スーパークラスのメソッド呼び出し。下記の場合はどうなるか?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class A def func puts "A" end end class B < A def func(a) super end end B.new.func(3) |
正解はエラーになります。superでの呼び出しではsuper()としないと引数なしとは認識されないのでそんなのはないとエラーに。
・虚数
下記のコードを実行した場合-1となるようにするには?には何が入るか?
1 2 |
a = ? * ? p a.to_i |
選択肢は1i、1I、-1(あと一つ忘れた)こたえは1i。二回試験受けて同じ問題出ました。
・extend
これは単純に選択肢としてextendを選ぶ問題。ほかの選択肢にincludeがあった..かな?
1 2 3 4 5 6 7 8 9 10 |
module Test def say p "hello" end end class C ? Test end C.say |
?の部分を問う形。これがetend
・標準添付ライブラリ
1 2 3 4 5 |
require '?' open("http://docs.ruby-lang.org/ja/2.1.0/doc/index.html") do |f| print f.read end |
この?の部分は何か?答えはopen-uri。資格本に同じような問題があったがrequireではなくopenの部分が問われていたので微妙に違った。
これも2回とも試験にでてました。
・継承したメソッドの呼び出し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class A private def func p "A" end end class B < A def func super end end B.new.func |
これは親クラスのメソッドがprivateでも子クラスのメソッドは呼び出しできます。
・Objectに関数を追加して他の関数から呼び出し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Object def func p "object" end end class A func def func p "A" end end A.new.func |
上記を実行した場合どうなるか?これは特にエラーとならず”object”,”A”と表示されます。
・クラスのprivate、protected
1 2 3 4 5 6 7 8 9 10 |
class A attr_accessor :a, :b ? :a, :b def func(x) a = x.a b = x.b end end A.new.func(A.new) |
かなり上記のコードは端折っていますが。
?の部分に入るのはprivate、protectedのどれ?というものこれでprivateだとエラーになります。
・全ての例外クラスのスーパークラスは?
Exception。選択肢にStandardError、やRuntimeErrorがありました。
rescueの例外クラスを省略した場合は
StandardErrorが補足される。選択肢にExceptionがありました。
あとは正規表現とか
だいたいこんな感じだったので参考になれば。