Rubyと仲良くなりたい٩( 'ω' )و

Rubyと仲良くなりたい日々のこと

Ruby技術者認定試験 Silver 対策 よかった教材の話

Ruby技術者認定試験 Silverを受験しました。
試験対策に利用してよかった教材を紹介します。

Rubyを理解するところから、という方は入門書を読んできちんと基礎を抑えることをおすすめします。
Rubyに慣れている方であれば、合格教本またはオンライン上の情報で事足りるかもしれません。

書籍

  • 『[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書 | 牧 俊男, 小川 伸一郎, 前田 修吾, CTCテクノロジー株式会社 』

書きながら覚えていく構成になっているところがとてもよかったです。各項目に試験の出題傾向や抑えるべきポイントが書いてあり、模擬問題も掲載されているので、メインの教材として利用していました。

  • 『かんたん Ruby (プログラミングの教科書) | すがわらまさのり』

かんたんに見えて大事なポイントがしっかり載っているので、試験対策と並行して読み進めると「ああ、これのことか!」と理解が進みました。(もしかしたら、まず最初にこちらから始めた方がよかったかも・・・?)

オンライン上の試験問題

公式サイト

  • 模擬問題集(Silver試験用)
    https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0
    元々PDFで掲載していた内容をGistに移したようで、50問の問題が掲載されています。
    出題の表記(例えば、選択するべき箇所を__(1)__と表記するなど)が本番に近いです。

  • REx - Ruby Examination https://rex.libertyfish.co.jp/
    学習の記録が残せるのと、Goldチャレンジ、Silverチャレンジ、学習チャレンジの3つのコンテンツがあるので、継続して利用するのに便利そうです。

その他学習サイト

  • Ruby技術者認定試験(Silver)対策問題集 | ミニツク - Rubyのe-ラーニング研修システム http://www.minituku.net/courses/1049510743/contents/775230600.html
    他の模擬問題に比べて後半が難易度が高めに感じたのですが、これを押さえておけば安心して試験に挑めそうなのでおすすめです。
    ファイル操作関連やobject関連の問題も多めで、大変お世話になりました。

模擬問題のやりすぎで注意する点

模擬問題とほぼ同じでちょっとだけ変えてある問題がいくつか出ていました。
例えば、全く同じ式と思いきや""||だけ変えてある問題やtruefalse逆になっている問題など、模擬問題をやっているからこそミスをしてしまいそうな問題があるので、見直しに十分注意が必要でした。

16進数怖くないという話

「0xAが10」とかの表記をどう受け止めたらいいのかわからなかったので整理しました。

コード上での表現

プログラミング上で、これはx進数ということを示すために、数字の前に接頭語をつけて表現します。 下記の表はそれぞれに対応する接頭語です。

2進数 8進数 10進数 16進数
0b 0または0o 0d 0x

2進数の場合

例えば、0b1011の場合、"0b"が2進数であるということを表現していて、"1011"が2進数の数字となります。
1011は10進数に変換すると、11となるので、Rubyで実行すると、こうなります。

0b1011
=> 11

つまり、2進数の場合は単純に"0b"に続く数値を10進数に変換すればどんな数値なのか理解することができます。

16進数の場合

16進数の場合、"0x"が16進数であるということを表現していて、"A"などのアルファベットが登場するのでわかりづらかったです。
16進数に登場するアルファベット、これはローマ数字では表現しきれない数値を表現しています。

例えば、2進数の場合、下記の対応図のように、2になる時に桁を繰り上げることができます。

10進数 2進数
1 01
2 10
3 11
4 100

ところが、16進数の場合、下記の対応図のように、16になる時に桁を繰り上げようとしたら、10進数の10〜16にあたる箇所を表現できません。

10進数 16進数
1 01
2 02
... ...
9 09
... ...
16 10

そこで、下記のようにその表現しきれない数値をローマ字で表現しているのです。

10進数 16進数
10 A
11 B
12 C
13 D
14 E
15 F
16 10

実際にコマンドを打ってみると16進数の末尾の数字は、0123456789ABCDEF0123456789ABCDEF....と繰り返されていることがわかります。

まとめ

Rubyに限った話ではないので、対応表や考え方も、結構ネット上にあって自分の理解しやすいものをみつけることもできる!最初は戸惑いましたが、落ち着いて考えれば16進数怖くないはず!というお話でした。

破壊的メソッドと非破壊的メソッドの話

破壊的メソッドと非破壊的メソッドの違いと「!」についての要点をざっくりまとめました。

破壊的メソッドとは

レシーバであるオブジェクトそのものに変更を加えるメソッドのことです。
非破壊的メソッドは、その場の実行結果のみに影響しますが、破壊的メソッドは自分自身に変更を加えてしまいます。

破壊的メソッドの例

popは、配列の末尾の要素を削除してそれ自身を返し、そしてレシーバ自体を変更する破壊的メソッドです。
下記のような場合、レシーバ自体に変更がかかっていることがわかります。

# 変数aに配列を代入する
a =  ["hedge", "rabbit", "tiger"]

# 変数aの末尾の要素("tiger")を削除してそれを返す
a.pop
=> ["tiger"]

# レシーバである変数a自体にも変更が加わっていることがわかる
p a
=> ["hedge", "rabbit"]

非破壊的メソッドの例

sliceは、引数に応じて文字列の中から部分文字列を取り出すsliceは非破壊的メソッドです。
下記のような場合、レシーバ自体には変更がかかっていないことがわかります。

# 変数aに配列を代入する
a =  ["hedge", "rabbit", "tiger"]

# 指定した要素を自身から取り除き、取り除いた要素を返す
a.slice(0..1)
=> ["hedge", "rabbit"]

# レシーバである変数aそのものには変更が加わっていないことがわかる
p a
=> ["hedge", "rabbit", "tiger"]

破壊的メソッドと!

上記に登場したsliceは破壊的メソッドですが、同じ機能をもつslice!は破壊的メソッドです。
破壊的メソッドには、!がついていることが多いですが、popshiftなど、!のつかない破壊的メソッドもあります。 sliceslice!のように、同じ機能をもつメソッドに、破壊的メソッドと非破壊的メソッドのパターンがある場合などは、破壊的メソッドの方に!がついてるようです。

参照記事

”!”についての見解を詳しく書いてくださっていて大変参考になりましたmm qiita.com