問題ページへ | |
前回の受験結果ページへ | |
解答の解説記事 |
【Ruby検定】平均点 |
||||||
| ||||||
まつもとゆきひろ氏が理事長を務めるRubyアソシエーションでは,2007年10月から始まった「Ruby認定試験」を開始した。プログラミング言語「Ruby」の正しい知識を身につけたエンジニアを育成し,Rubyによるシステム開発の普及を目指すことが目的である。
写真1●まつもとゆきひろ氏 [画像のクリックで拡大表示] |
平均点は100点満点で38.0点と,全体に専門的な知識を問う難しい試験だった。本番の試験も,伊藤忠テクノソリューションズの技術者が不合格になったというほどで,合格者はかなりの腕の持ち主ということになる。
各問の正答率は以下のようになった。
問題 | Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 | Q9 | Q10 |
---|---|---|---|---|---|---|---|---|---|---|
正答率(%) | 32.6 | 27.6 | 73.4 | 52.1 | 36.3 | 84.4 | 23.8 | 59.3 | 72.4 | 42.8 |
問題 | Q11 | Q12 | Q13 | Q14 | Q15 | Q16 | Q17 | Q18 | Q19 | Q20 |
---|---|---|---|---|---|---|---|---|---|---|
正答率(%) | 65.5 | 63.3 | 31.6 | 67.8 | 36.4 | 18.6 | 77.7 | 62.9 | 73.2 | 17.2 |
正答率が17.2%と,最も低かったのが問題20だ。
【問題20】
以下のコードを実行した時の出力として正しいものを選択してください。
|
【選択肢】 | 正解 | ||
---|---|---|---|
A) | parseメソッドが定義されていないため実行時にエラーとなる | ○ | |
B) | 「1979/07/16 12:00:00」と標準出力に表示される | ||
C) | 年数は和暦(S54)での入力が許されないので実行時にエラーとなる | ||
D) | dateライブラリが読み込まれていないため実行時にエラーとなる | ||
写真2●伊藤忠テクノソリューションズ 大場光一郎氏 [画像のクリックで拡大表示] |
4番にdateライブラリという選択肢があるが,残念ながらdateではなくtimeである。紛らわしいために多くの受験者が間違えてしまったようだ。
timeライブラリを組み込むには「require "time"」を実行する。
【問題16】
以下のRubyの演算子の中で再定義可能なメソッドとして定義されているものをすべて選択してください。
【選択肢】 | 正解 | ||
---|---|---|---|
A) | [] | ○ | |
B) | ! | ||
C) | = | ||
D) | <=> | ○ | |
正解は「A)[] 」と「D)<=>」である。「C++では『=』は再定義できる」(伊藤忠テクノソリューションズ大場氏)ため,混乱した受験者もいたのかもしれない。
「Rubyでは多くの演算子が再定義可能だが,代入など,メソッドで意味が定義できないものは再定義可能になっていない」(まつもとゆきひろ氏)。そのほかには論理和,論理積などが定義できない。列挙すると「?: .. ... ! not && and || or ::」が再定義できない演算子だ。
【問題7】
以下のコードを実行した時の出力として正しいものを選択してください。
|
【選択肢】 | 正解 | ||
---|---|---|---|
A) | hello world! | ||
B) | hello 2 | ○ | |
C) | 1 world! | ||
D) | 1 2 | ||
写真3●ITpro EXPO会場での「Ruby検定」解答解説シアターの様子 [画像のクリックで拡大表示] |
eachメソッドのブロックには,ブロックパラメータ|b|が定義されています。ブロック内では,配列の要素の1と2が変数bに順に取りだされる。変数bには1と2が順に代入され,eachメソッドの実行後,変数bの値は2になる。
問題はRuby 1.8が対象だが,Ruby 1.9では結果が変わるため注意が必要だ。Ruby 1.9では,ブロックの中の引数はローカル変数になるため,ブロック外への影響は及ばない。そのため,eachメソッド実行後も,bの値は最初に代入された「World!」のまま。そのため実行結果はHellow World!になる。
まつもと氏から,Rubyの設計思想が語られる解説もあった。問題11は,例外を補足する構文として正しいものを選ぶ問題だった。正解は「beginとrescure」。
例外補足構文としては,JavaやC++が採用する「tryとcatch」が有名だ。「tryはやってみるという意味で,例外が起きるのが当たり前というニュアンスがある。そうではなく,例外は本来起きてほしくないもの。例外が起きないのが当たり前で,発生したら救助に行かなければならない」(まつもと氏)。
ちなみに問題11の正答率は65.5%と高かった。
最も正答率が高かったのは問題6で,84.4%だった。配列への代入とeachメソッドの動作を問うものだが,Rubyプログラムを書いたことがなければ正答できない問題で,受験者のレベルが高いことがうかがえた。
「他の言語との違い」がポイント
まつもと氏は,全体を通した受験者へのアドバイスとして「他の言語と違う部分の知識を問う問題が多いので,そういった部分を重点的に学ぶと有効」と助言した。
Ruby技術者認定試験は,これまで,松江市と東京で紙による試験が行われていたが,2月25日からはコンピュータによる試験が日本全国の200カ所で始まる。さらに4月からは,海外135カ国に英語版試験の配信も始まる予定だ。