ようへいの日々精進XP

よかろうもん

2018 年 03 月 31 日(土)

ジョギング

  • 香椎浜 x 3
  • ゆっくり目のペースで走り始めたけど, なかなかペースが上がらずキツかった

日課

  • (腕立て x 50 + 腹筋 x 50) x 3

うなぎ

  • 久しぶりに新宮のうなぎ屋さんで
  • 美味しかったけど, うなぎが不漁とのことで, 以前と比べると残念な感じだった

奥さんが昼寝から起きないので

今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (14) ~

もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.

Q7. 文法

以下のコードで, case 文の比較に使用されている演算子はどれか.

a = [1, 'Hello', false]
a.each do |x|
  puts case x
  when String then 'string'
  when Numeric then 'number'
  when TrueClass, FalseClass then 'boolean'
  end
end

以下, 解答.

3 ===

以下, irb で実行.

irb(main):001:0> a = [1, 'Hello', false]
=> [1, "Hello", false]
irb(main):002:0> a.each do |x|
irb(main):003:1*   puts case x
irb(main):004:2>   when String then 'string'
irb(main):005:2>   when Numeric then 'number'
irb(main):006:2>   when TrueClass, FalseClass then 'boolean'
irb(main):007:2>   end
irb(main):008:1> end
number
string
boolean
=> [1, "Hello", false]

以下, 解説.

  • case 文の比較には === を使用する
  • ===Module#===

Q8. オブジェクト指向

以下の実行結果になるように, [ x ] に記述する適切なコードを全て選ぶ.

class Hoge
  def fuga(o = nil)
    [ x ]
  end
  private
  def hoge
    puts 'Hoge'
  end
end

Hoge.new.fuga(Hoge.new)

実行結果.

Hoge

以下, 解答.

1 hoge

以下, irb での実行例.

irb(main):001:0> class Hoge
irb(main):002:1>   def fuga(o = nil)
irb(main):003:2>     hoge
irb(main):004:2>   end
irb(main):005:1>   private
irb(main):006:1>   def hoge
irb(main):007:2>     puts 'Hoge'
irb(main):008:2>   end
irb(main):009:1> end
=> :hoge
irb(main):010:0> 
irb(main):011:0* Hoge.new.fuga(Hoge.new)
Hoge
=> nil

以下, 解説.

  • private メソッドは, レシーバを指定した呼び出しは出来ない

Q9. 実行環境

Object クラスに標準で定義されている組み込み関数ではないものを選ぶ.

以下, 解答.

  1. NULL

その他の選択肢.

定数 用途
ARGF スクリプトに指定した引数 (ARGV を参照) をファイル名とみなして, それらのファイルを連結した 1 つの仮想ファイルを表すオブジェクト
ARGV Object::ARGV Ruby スクリプトに与えられた引数を表す配列
ENV 環境変数を表すオブジェクトで Hash と同様のインターフェースを持つが, Hash と異なり, ENV のキーと値には文字列しかとること出来ない
DATA スクリプト__END__ プログラムの終り以降をアクセスする File オブジェクト

以下のようなコードを用意してざっくりと, 各定数の挙動を確認.

p ARGV

while line = ARGF.gets
  p line
end

p ENV['TEST']

DATA.each do |d|
  p d
end
__END__
foo
bar
baz

実行すると以下のように表示される.

$ TEST=test ruby test.rb test1.txt test2.txt 
["test1.txt", "test2.txt"]
"aaaa\n"
"bbbb\n"
"test"
"foo\n"
"bar\n"
"baz\n"

フムフム