ようへいの日々精進XP

よかろうもん

2018 年 05 月 09 日(水)

ジョギング

  • 香椎浜 x 2 周
  • 足回り色々とガタがきている感
  • 小休止を入れた方がいいかなと思ったり

日課

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

義父の一周忌

思い返せばあっという間だった気がするけど, お義父さんが亡くなって一年が経った. 「よしもと」にて我が家だけの一周忌法要. お義父さん, 色々と申し訳ございません.

今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 16) ~

もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.

Q49. オブジェクト指向

以下のコードの実行結果として正しいものを選択する.

# コード
class Bar
  def foo
    puts "barbarbar"
  end
end
class Foo < Bar
  def initialize(obj)
    obj.foo
  end
  def foo
    puts "foofoofoo"
  end
end
Foo.new(Foo.new(Bar.new))
  1. barbarbar foofoofoo

以下, irb による実行例 (一部, 抜粋).

...
irb(main):014:0> Foo.new(Foo.new(Bar.new))
barbarbar
foofoofoo
=> #<Foo:0x0055972a044978>

ややこしいので, 1 個ずつ分解.

irb(main):018:0> Bar.new.foo
barbarbar
=> nil
irb(main):019:0> Foo.new(Bar.new)
barbarbar
=> #<Foo:0x0055972a008b80>
irb(main):020:0> o = Foo.new(Bar.new)
barbarbar
=> #<Foo:0x00559729f1b808>
irb(main):021:0> Foo.new(o)
foofoofoo
=> #<Foo:0x00559729f19738>

Q50. オブジェクト指向

以下のコードの実行結果として正しいものを選択する.

# コード
p Class.superclass
  1. Module

以下, irb による実行例.

irb(main):022:0> p Class.superclass
Module
=> Module

以下, 解説より抜粋.

irb(main):023:0> Class.ancestors
=> [Class, Module, Object, Kernel, BasicObject]

Q51. オブジェクト指向

以下のコードの説明として正しいものを選択する.

# コード
class Foo
  private
  def foo
    puts "foofoofoo"
  end
end
puts Foo.new.respond_to?(:foo)
  1. このコードを実行すると「false」が出力される

以下, irb による実行例 (一部, 抜粋).

...
irb(main):007:0> puts Foo.new.respond_to?(:foo)
false
=> nil

以下, 解説より抜粋.

  • respond_to? メソッドは, レシーバ (Foo クラス) が引数で指定した名前の public メソッドを持っているか調べるメソッド
  • 第 2 引数に true を指定すれば, 指定した名前の private メソッドを持っているかを調べることが出来る
# private メソッドを持っているか
irb(main):008:0> puts Foo.new.respond_to?(:foo, true)
true
=> nil
# bar メソッドを追加
irb(main):009:0> class Foo
irb(main):010:1>   def bar
irb(main):011:2>     puts "barbarbar"
irb(main):012:2>   end
irb(main):013:1> end
=> :bar
# public メソッドを持っているか
irb(main):014:0> puts Foo.new.respond_to?(:bar)
true
=> nil

オープンクラスしてメソッドを追加した場合, 特に指定が無ければ public メソッドになる模様.

フムフム.