ようへいの日々精進XP

よかろうもん

2018 年 03 月 07 日(水)

ジョギング

  • お休み
  • 香椎浜散歩
  • 筋肉痛はだいぶん治まってきたので, 明日から軽いジョギングは再開したい

日課

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

夕飯

  • 名島本陣

JaSST

JaSSTソフトウェアテストシンポジウム

サイトはちょっとノスタルジックだが, ソフトウェアテストシンポジウムという催しが東京で開催されていたらしい.

JaSSTソフトウェアテストシンポジウム-JaSST'18 Tokyo

サイトの品質に責任を持つ SRE という言葉がバズっていたりするが, Quality Assurance という観点からソフトウェアのテストや品質の保証をどのように担保していくか, また, その周りの技術や実装に興味がある昨今.

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

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

Q34. クラス定義について (オープンクラス)

以下のコードの説明として正しいものを選択してください.

class Foo
 def foo
  puts "foo"
 end
end
class Foo
 def bar
  puts "bar"
 end
end

Fooクラスにはfooメソッドとbarメソッドが定義される

以下, 実行例.

[1] pry(main)> class Foo
[1] pry(main)*   def foo 
[1] pry(main)*     puts "foo"  
[1] pry(main)*   end   
[1] pry(main)* end  
=> :foo
[2] pry(main)> class Foo
[2] pry(main)*   def bar 
[2] pry(main)*     puts "bar"  
[2] pry(main)*   end   
[2] pry(main)* end  
=> :bar
[3] pry(main)> Foo.new.methods.grep(/foo|bar/)
=> [:bar, :foo]

Q35. モジュールの説明  

モジュールの説明として正しいものを選択してください.

モジュールはMix-inすることで定数やメソッドなどをクラスに追加することができる

その他の選択肢について.

  • モジュールはクラスと同様にインスタンスを生成することができる → インスタンスは生成することは出来ない
  • モジュール定義内にクラスを定義することはできない → クラスを定義することは出来る
  • モジュールをMix-inする場合、通常extendを使用する → include や prepend を使う, extend は特異クラスにモジュールを mix-in する際に利用する

以下, 諸々実行例.

# モジュールはインスタンス化出来ませぬ
[4] pry(main)> module M; end
=> nil
[5] pry(main)> M.new
NoMethodError: undefined method 'new' for M:Module

# モジュール内に暮らすを定義することは出来る
[1] pry(main)> module M
[1] pry(main)*   class C
[1] pry(main)*     def foo
[1] pry(main)*       p 'module in class'
[1] pry(main)*     end  
[1] pry(main)*   end  
[1] pry(main)* end  
=> :foo
[2] pry(main)> M::C.new.foo
"module in class"
=> "module in class"

# extend メソッドは特異クラスにモジュールを mix-in する際に利用する
[1] pry(main)> module M
[1] pry(main)*   def foo
[1] pry(main)*     p 'foo'
[1] pry(main)*   end  
[1] pry(main)* end  
=> :foo
[2] pry(main)> class Hoge
[2] pry(main)* end  
=> nil
[3] pry(main)> hoge = Hoge.new
=> #<Hoge:0x000055966cffe8c8>
[4] pry(main)> hoge.extend(M)
=> #<Hoge:0x000055966cffe8c8>
[6] pry(main)> hoge.foo
"foo"
=> "foo"

ふむふむ.