Ruby認定試験Goldに合格する3つのポイント!
はじめまして、@coralreefs1です。
みなさんRubyは好きですか?
まだRuby書いたことない方、一度書いてみてください。楽しいですよ!
そんなRubyの理解を深める意味もあって認定試験(Gold)を取りましたが、これからRubyを使う方はこれで勉強してから実務に入ると、APIを調べる回数も減りますし、スムーズに開発を進められると思うのでオススメです。
とはいえ受験料が高いので、試験で抑えときたいポイントをご紹介!
出題範囲の問題配分はどんな感じ?
僕が受けた時はだいたい以下のような感じでした。
実行環境
- コマンドラインオプション
- 組み込み変数/定数
ここからは2、3問かな。試験直前に一覧を見直しておくと吉です。
文法
- 変数と定数
- 演算子
- ブロック
- 例外処理
- 大域脱出
15問くらい。変数と定数はクラス、サブクラス、インスタンス、特異クラス、モジュールを複雑に絡めて出題されるので、クラスオブジェクトのインスタンス変数と、インスタンスオブジェクトのインスタンス変数の違いなど、確認しときましょう。
ブロックは変数の束縛とブロック内でreturnやbreakされた時の動作を抑えときましょう。
例外クラスの階層は覚えとかないとです。NoMethodErrorはNameErrorのサブクラスなので、以下のコードはNoMethodErrorを表示します。
begin "John".cooking rescue NameError => e puts e.class # NoMethodError を表示 end
オブジェクト指向
- メソッドの詳細
- メソッドの可視性
- クラスの詳細
- クラスの継承
- モジュールの詳細
試験の肝の部分です。25問くらい。他の試験項目と絡めて出題されるので、試験の半分以上に関係してると思います。super と super() は動作が異なります。initialize を定義しない場合は親クラスの initialize が自動で呼ばれます。注意しとくことはたくさんありますが、メソッドと定数の探索経路、スコープに関しては確実に抑えときましょう。
組み込みライブラリ
- よく使用されるクラス(Object、Kernel、Module等)
- よく使用されるモジュール(Enumerable、Comparable等)
- 数値
- 正規表現
10問くらい。よく使われるクラスとモジュールはリファレンスに一度目を通しておきましょう。正規表現は基本的な使い方以外にも、 *? や +? などの最短マッチも出題されます。
標準添付ライブラリ
- よく使用されるライブラリ(socket、rdoc等)
3問くらい。全滅は痛いので、rdoc、yaml、stringio、date など、リファレンスで一通り目を通しときましょう。
あら?問題数の合計が50問以上ある?
ざっくり勘定ですごめんなさい。
抑えておきたい参考書
Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)
- 作者: 増井雄一郎,小川伸一郎,(株)日立ソリューションズ藁谷修一,川尻剛,牧俊男,Rubyアソシエーション,CTCテクノロジー(株)監修
- 出版社/メーカー: 技術評論社
- 発売日: 2012/02/22
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 204回
- この商品を含むブログ (9件) を見る
誤字がとっても多いですが、この本の模擬試験からも出題されたりするのでオススメ。
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (112件) を見る
メタプログラミングとありますが、試験範囲のオブジェクト指向に該当する内容が多く、特にRubyをこれから書こうという人はこれでメソッド、定数の探索経路や特異クラス、スコープについて理解しておくといいです。
何はともあれ irb
試験ではクラス、モジュール、インスタンスなどが複雑に組み合わされて出題されるので、単純に暗記して知識で解くよりも、自分でirb で似たような複雑な構成を書いて、細かく動作確認をしておくといいと思います。
おまけ
以下の2つのコード、include の位置を変えると表示される結果が異なります。
- コード1
module M @@x = 100 end class A @@x = 500 include M end module M puts @@x # 100 と表示される end class A puts @@x # 500 と表示される end
- コード2
module M @@x = 100 end class A include M @@x = 500 end module M puts @@x # 500 と表示される end class A puts @@x # 500 と表示される end
ややこしいですね!