紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Ruby学習】育児の合間にRuby技術者認定資格Silver学習①

f:id:yokoyantech:20190609155931p:plain

はじめに

2019年の目標の1つに掲げているRuby技術者認定資格のSilver取得に向けての学習ログです。 最近、AtCoderの過去問を解くのが楽しくて、本資格の勉強を全くしていなかった ので、そろそろ集中して学習して取得してしまうことにしました。

2019年の目標

www.yokoyan.net

目標資格

まずは、Ruby Association Certified Ruby Programmer Silver version 2.1 の取得を目指します。

www.ruby.or.jp

学習教材

本来は公式問題集を買って学習するのが王道だと思いますが、今回はGithubで公開されている公式問題50問から解くことにしました。

PDFで提供されていたものが、今はGithubに変わっているようです。

silver_j.md · GitHub

以下、気になった問題の整理とまとめです。

問題26

  • 正規表現の問題。matchscanの違いを理解することが大事。
  • \wは、アルファベットと数字a-zA-Z0-9の略語。
  • +はメタ文字。1回以上繰り返す。

docs.ruby-lang.org

matchで実装した場合

s = "To be or not to be, that is the question."
hash = Hash.new(0)
s.match(/\w+/){|i| hash[i] += 1}
p hash

matchは1度しか正規表現のマッチを行わない。つまり、最初に出てきた単語のToだけで終了している。

$ ruby 26.rb 
{#<MatchData "To">=>1}

scanで実装した場合

s = "To be or not to be, that is the question."
hash = Hash.new(0)
s.scan(/\w+/){|i| hash[i] += 1}
p hash

scanは繰り返しマッチを行う。ブロック引数に渡された単語の出現回数をハッシュの値としている。

$ ruby 26.rb 
{"To"=>1, "be"=>2, "or"=>1, "not"=>1, "to"=>1, "that"=>1, "is"=>1, "the"=>1, "question"=>1}

問題27

  • Integer#chrの問題。
  • 与えられた文字コードに対応する1文字を取得する。
p 12354.chr(Encoding::UTF_8)
$ ruby 27.rb
"あ"

指定されたエンコーディングで解釈できない時はエラーが発生する。

p dafad.chr(Encoding::UTF_8)
$ ruby 27.rb
27.rb:1: unknown encoding name:  (ArgumentError)

問題29

  • 論理演算子の評価方法に関する問題。
  • &&演算子は、左辺がtrueと評価された時のみ、右辺を評価する。 つまり、左辺がfalseだった場合、左辺だけで評価が完了する。
  • ||演算子は、右辺がfalseと評価された時のみ、右辺を評価する。 つまり、右辺がtrueだった場合は、右辺だけで評価が完了する。
ary = []
ary << 1 && false
true || ary << 2
false && ary << 3
false || ary << 4
p ary
$ ruby 29.rb
[1, 4]

軽くやってみた感想

AtCoderの過去問ばかり解いていて、資格の学習を全くしていないことが気がかりでした。しかし、 getsでの標準入力や、chompでの改行コード削除など、AtCoderで学んだ知識が使える ところがあり、意外とゼロ勉強でも問題が解けるなという印象です。Rubyのコードを書き続けているので、当たり前といえば当たり前なのですが、使える知識が自然と身についていたのは有難いです。

まだ問題集を解いているだけなので、今後、AtCoderで学んでいない範囲が出てくるかもしれませんが、隙間時間で無理せず学習を続けていきたいと思います。

まとめ

ということで、今回からRuby技術者認定資格のSilver取得に向けて、学習ログを残していきます。7月ごろに受験できればと思います!