Subscribed unsubscribe Subscribe Subscribe

Coral Reefs

- ケアンズの海が好き -

Ruby認定試験Goldに合格する3つのポイント!

f:id:coralreefs:20130509143118j:plain

 

はじめまして、@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公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

 

誤字がとっても多いですが、この本の模擬試験からも出題されたりするのでオススメ。

 

メタプログラミングRuby

メタプログラミングRuby

 

メタプログラミングとありますが、試験範囲のオブジェクト指向に該当する内容が多く、特に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

 

ややこしいですね!