讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Ruby Silver 試験】Ruby Silverの内容をメモしていく

はじめに

4月に「Ruby Silver取る!」って意気込んでいたのに、、結局他の事をしてると4月中どころか7月も終わろうとしております。

有言実行できずめちゃめちゃかっこ悪いですが、それでも粘り強く勉強していかないと話にならないので言い訳せずにとれるまで努力します。

ということでまた一歩づつ進んで行くのでそれまでの内容を今日もメモする。

やっていくこと

下記サイトののRuby Silverの問題

rex.libertyfish.co.jp

今回の問題

次のコードのXXXXに記述するとエラーが発生するコードはどれですか

puts XXXX

選択肢
"0x90".hex

選択肢
'90'

選択肢
0b2

選択肢
'80'.oct

これ、結論から言うとエラーは0b2のやつなので3番目。
その他は実行はされそうです。

ちなみに実行するとこんなエラーが起こる

irb(main):001:0* puts 0b2
SyntaxError: (irb):1: numeric literal without digits
puts 0b2
       ^
    from /Users/your_user/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'

Numeric Literalっていうのはこいつらのこと

  • Integer
  • Decimal
  • Floating point

digitsというのはこういうやつ。

123.digits

=> [3, 2, 1]

こういう風になる予定だったけど、自分のRubyバージョンがRuby2.3.1でまだdigitが使えない状態でした。

なので深く追求せず進めさせてください。

気になる方はこちら を見ていただければいいと思います

結局は Numeric literal(数字できているオブジェクト)のくせにdigit(数字)のものでできてねえじゃねーかよ!

っということなんですかね〜?

※理解に苦しんだので詳しい方教えて下さい。

hexモジュール

【Rubyリファレンス】:hex (String)

str.hex

  • hexモジュールは、文字列を16進数の表現と見なして整数に変換してくれる
  • 文字列の先頭には"0x"が付いていてもいなくても動作する
  • 文字列の先頭から16進数と見なせる部分を切り取って変換する
  • 16進数と見なせる部分がなければ0を返す

    では早速動かしてみる
irb(main):001:0> "0x90".hex
=> 144


文字列の先頭には"0x"が付いていてもいなくても16進数と思われるところを読み込んで動作するとのことなので以下を試してみる

irb(main):002:0> "90".hex          
=> 144


16進数と思われない文字列がある場合は0を返すとのことなので下記を試してみる

irb(main):003:0> "saniki".hex          
=> 0

ちゃんと0が帰ってきました

octモジュール

【Rubyリファレンス】:oct (String)

str.oct

  • octモジュールは、文字列を8進数と見なして整数に変換する
  • 文字列の先頭には、"0"や"0o"がなくても動作する
  • 文字列の先頭から8進数と見なせる部分を切り取って変換する
  • 8進数と見なせる部分がなければ0を返す

ここまで見ると先程取り上げたhexモジュール(16進数)の8進数版という感じですね

ということで動かしてみる。

irb(main):001:0> "0o144".oct
=> 100

0oを除いて実行する

irb(main):002:0> "144".oct
=> 100

おそらく8進数でないものにあててみる

irb(main):003:0> "sanuki".oct
=> 0

この記事はここまで