紙一重の積み重ね

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

【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に変わっているようです。

https://www.ruby.or.jp/assets/images/ja/certification/examination/exam_prep_jp.pdf

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

問題37

File.open("foo.txt") do |io|
    io.write(Time.now.strftime("%Y/%m/%d"))
end

foo.txtが同一ディレクトリにない場合

$ ruby 37.rb
37.rb:1:in `initialize': No such file or directory @ rb_sysopen - foo.txt (Errno::ENOENT)
        from 37.rb:1:in `open'
        from 37.rb:1:in `<main>'

foo.txtが同一ディレクトリにある場合

  • モードを明示的に指定していないため、 読み取りモードで起動している
$ ruby 37.rb
37.rb:2:in `write': not opened for writing (IOError)
       from 37.rb:2:in `block in <main>'
       from 37.rb:1:in `open'
       from 37.rb:1:in `<main>'

正常に動くコード

  • mode_enc = "w"で明示的にファイルを書き込みモードでオープンする。

docs.ruby-lang.org

File.open("foo.txt", mode_enc = "w") do |io|
  io.write(Time.now.strftime("%Y/%m/%d"))
end

foo.txtにも時刻が書き込まれる。

2019/06/10

問題38

  • Dirクラスのクラスメソッドではないものを選ぶ問題

docs.ruby-lang.org

Dir.rmdirメソッド

  • ディレクトリの削除を行う
  • deleteメソッドでもOK
$ mkdir -p tmp/hoge
$ pwd
/home/ubuntu/workspace/ruby_silver
Dir.rmdir("/home/ubuntu/workspace/ruby_silver/tmp/hoge")
  • 上記のプログラムを実行するとディレクトリが削除される。
$ ruby 38.rb
$ cd /home/ubuntu/workspace/ruby_silver/tmp/hoge
bash: cd: /home/ubuntu/workspace/ruby_silver/tmp/hoge: No such file or directory

Dir.pwdメソッド

  • カレントディレクトリのフルパスを文字列で返す
p Dir.pwd
$ ruby 38.rb
"/home/ubuntu/workspace/ruby_silver"

Dir.getwdメソッド

  • Dir.pwdと同じ
p Dir.pwd
p Dir.getwd
$ ruby 38.rb
"/home/ubuntu/workspace/ruby_silver"
"/home/ubuntu/workspace/ruby_silver"

問題39

  • String#deleteメソッドに関する問題

docs.ruby-lang.org

puts "0123456789".delete("0-58-")
  • delete("0-5")は、012345を削除
  • delete("8-")は、8を削除
$ ruby 39.rb
679

まとめ

公式問題の50問が解き終わったため、次は合格教本の問題を解いていきたいと思います。

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書