ruby gold 受験を振り返る

  • 20
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ネットの海は広大で偉大です。
ここのテキストが無くても参考になるものはたくさんある。

なのでここに示しているのはただの記録、参考になる人がいるのかどうかはその人次第。

他でも言われている通り(ここにたどり着いたということは他の情報も当然手に入れているでしょ?)参考書は以下の通り。

  • 公式教科書
  • メタプログラミングRuby

あとはたのしいRuby、はじめてのRubyを読んだ。Rubyは3年くらい使っている。Railsはわからん。純粋に汎用スクリプト言語としてのRubyが好き。

業務では使い捨てのような、テキスト処理メインの業務アプリをRubyで書いてOcraでexe化したりして活用している。自身のプログラミングのレベルはかなり低い。
が、Rubyならなんとか問題解決まで導いてくれているからナイフ程度の武器に成っている。

本題。ruby goldを2014年6月に受験した。あと1問でも間違えたら不合格というギリギリでの合格。silverは一年前に取得済み。

要するにかなり苦戦したということ。

以下のような問題が出題されたと記憶している。複数回答の問題が気分的には半分くらいあって面食らった。

  • 定数の探索:クラスを開いたり、定数のスコープとか(トップレベルとクラス内で同じ名前の定数を定義した場合の動作)
  • プライベートメソッドの継承、再定義:継承先での再定義するとどうなるか(可視性が変更できることなど)
  • プライベートメソッドの継承先での呼び出し可否:上と似た問題が出ていた
  • protectedなメソッドの呼び出し結果:とにかくpublic、protected、privateの動き、他の言語との違いを問う
  • 正規表現:match、scanの動きを押さえた上で正規表現の部分一致や最短一致とかまで問う問題
  • オブジェクトの作成:new、initializeの動き
  • スレッドの作成:よくあるrunは無いよ的な問題
  • 再定義可能な演算子:再定義の記述の仕方まで含めて問う(+、-、<<などを押さえる)
  • ソケットクラス:持っているメソッドとかを問う
  • EXITを捕捉:例外の捕捉とその後の動き
  • rescueを後置する書き方:補足した結果どうなるか問う
  • マーシャル:できる事できない事

  • superを入れ子で呼び出す:親クラスの中、そこにincludeしたモジュール内でのsuperなど
  • Module:できる事できない事、クラスとの違いの理解を問う
  • クラス変数とスコープの関係:Object内で定義したり、継承先で呼び出す順番でどんな結果になるかなど
  • attrシリーズ:定義の仕方
  • 可変長引数:受け取り、表示時の展開
  • オプション引数:デフォルト値とか、受け取った結果とか
  • case式:実行結果
  • Comparator:定義して動作させた結果(<=>)
  • Moduleのミックスイン:include、extendした結果
  • 大域脱出:出題範囲にありますが、本当に出題されます
  • 冗長モード:引数でオプションを与え、$VERBOSE、$WARNなど指定した場合の動作を問う
  • lambda、Procの呼び出し:引数で与えた後の呼び出し方などを問う
  • yieldの動き:引数を与えたり、呼び出したりを問う
  • ロードパス:特殊な変数と引数のオプションを絡めて問う
  • require、loadの動き:違いを問う
  • 多重継承について:文章問題で多重継承は可能か否か問う
  • 変数のスコープ:有効な範囲を問う
  • rdocの記述:正しい記述を選ぶ
  • 継承のチェーン:孫クラスにModuleをincludeした動作を絡めたところまで問う
  • 継承時のメソッドの呼び出し:undef、undef_methodまでの理解を問う
  • each〜の動き:Arrayのeach系のメソッドの動き
  • doと{}の違い:結合度の違いを見抜けるか問う(括弧を省略してよいケース、エラーに成るケース)
  • 論理演算子の評価:nilがどう評価されるかなどの理解を問う
  • freezeしたArray:どのような操作ができる、できないを問う(変更は不可、再代入は可などの理解)
  • dupとclone:そもそもなにができるか、違いは何かの理解を問う
cloneは凍結状態、汚染状態、信頼状態をコピーする。dupは汚染状態と信頼状態のみ。
cloneは特異メソッドもコピーする。dupメソッドはしない。
  • 特異メソッドの定義:クラス内での特異メソッドの定義、呼び出し可否の理解を問う(<<でクラス内でクラスをオープン、特異メソッドの定義など)
class << A
  def b
    p "b"
  end  
end
A.b #=> "b"
  • ブロックの受け取り:引数としてブロックを受け取り、利用した結果を問う
  • 少数の加算結果と整数との比較:誤差が発生する事や、同値判定になる、成らないケースについて問う
1/2 #=> 0
1.0/2 #=> 0.5
  • inspectを選ぶ問題:メソッドの関連性の知識を問う
2.0.0 か ら Object#inspect が使われることになっている
  • トップレベルでのメソッド定義:スコープの範囲や定義の内容を問う
  • グローバル変数のスコープ:クラス内やトップレベルでどのように振る舞うか問う(def内は呼び出されるまで評価される?されない?など)
  • エラーの継承:例外がどのように捕捉されるか問う
  • injectの動作:加算だけではなく、初期値とブロック内での処理結果を問う

細かいところは意見があれば思い出してみます。

追記:2.1を受験したのでメモ