ようへいの日々精進XP

よかろうもん

2018 年 03 月 29 日(木)

ジョギング

  • 香椎浜 x 2 周
  • んー, ずっと左足甲, 足底筋が痛い

日課

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

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

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

今日から模擬試験を解いていく.

Q1. 文法

以下のコードを実行するとどうなるか.

[1, 2, 3].each do |i|
  num = i
end

puts num
  • 例外が発生する

why?

  • 変数 num は each ブロック内でのみ有効となる
  • 初期化されていない num にアクセスする為, 例外が発生する

irb で確認

irb(main):001:0> [1, 2, 3].each do |i|
irb(main):002:1*   num = i
irb(main):003:1> end
=> [1, 2, 3]
irb(main):004:0> puts num
NameError: undefined local variable or method `num' for main:Object
        from (irb):4
        from /home/kappa/.rbenv/versions/2.1.10/bin/irb:11:in `<main>'

Q2. 標準添付ライブラリ

次のコードを実行するとどうなるか. 該当するものを全て選ぶ.

a = 1.0 + 1
a = a + (1 / 2r)
a = a + (1 + 2i)

why?

irb で確認

irb(main):005:0> a = 1.0 + 1
=> 2.0
irb(main):006:0> a.class
=> Float
irb(main):007:0> a = a + (1 / 2r)
=> 2.5
irb(main):008:0> a.class
=> Float
irb(main):009:0> a = a + (1 + 2i)
=> (3.5+2i)
irb(main):010:0> a.class
=> Complex

Q3. オブジェクト指向

以下のコードを実行するとどうなるか.

class A
  private
  def hoge
    puts 'A'
  end
end
  
class B < A
  public :hoge
end

B.new.hoge
  • A と表示される

why?

スーパークラス A の private メソッド hoge は, サブクラス B において public メソッドに再定義されている為, 外部からの呼び出しに対して応答出来る.

irb で確認

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