ジョギング
- 香椎浜 x 2 周
- なんだかバランスが悪い感じがしている
日課
- (腕立て x 50 + 腹筋 x 50) x 3
たけのこ
- 実家からたけのこが送られてきた
- 明日からたけのこ三昧 (の予定
夕飯
- 「もりす」にて
今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 8) ~
もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.
Q25. オブジェクト指向
以下のコードの実行結果として正しいものを選択する.
# コード class Class1 def set_value(value) @value = value end def get_value return @value end end obj1 = Class1.new obj1.set_value("value1") puts obj1.get_value obj2 = Class1.new puts obj2.get_value
- value1nil
以下, irb による実行例.
irb(main):001:0> class Class1 irb(main):002:1> def set_value(value) irb(main):003:2> @value = value irb(main):004:2> end irb(main):005:1> irb(main):006:1* irb(main):007:1* def get_value irb(main):008:2> return @value irb(main):009:2> end irb(main):010:1> end => :get_value irb(main):011:0> irb(main):012:0* obj1 = Class1.new => #<Class1:0x005608d486f1b8> irb(main):013:0> obj1.set_value("value1") => "value1" irb(main):014:0> puts obj1.get_value value1 => nil irb(main):015:0> obj2 = Class1.new => #<Class1:0x005608d4854340> irb(main):016:0> puts obj2.get_value => nil
以下, 解説より抜粋.
ちなみに, インスタンス変数は未初期化時に参照してもエラーにならず, nil が返される.
irb(main):019:0> p @a nil => nil irb(main):020:0> p a NameError: undefined local variable or method `a' for main:Object
Q26. 文法
以下のコードの実行結果として正しいものを選択する.
# コード ary = [:job1, :job2, :job3] ary.push(:job4) ary.unshift(:job5) ary.pop ary.shift p ary
1. [:job1, :job2, :job3]
以下, irb による実行例.
irb(main):001:0> ary = [:job1, :job2, :job3] => [:job1, :job2, :job3] irb(main):002:0> ary.push(:job4) => [:job1, :job2, :job3, :job4] irb(main):003:0> ary.unshift(:job5) => [:job5, :job1, :job2, :job3, :job4] irb(main):004:0> ary.pop => :job4 irb(main):005:0> ary.shift => :job5 irb(main):006:0> p ary [:job1, :job2, :job3] => [:job1, :job2, :job3]
以下, 解説より抜粋.
Array#push, Array#pop, Array#unshift, Array#shift は全ての配列の要素の追加と取り出しを行うメソッドである.
メソッド | 機能 (ドキュメントより抜粋) |
---|---|
Array#push | 指定されたオブジェクトを順番に配列の末尾に追加する |
Array#pop | 配列の末尾から要素を取り除いてそれを返す |
Array#unshift | 指定されたオブジェクトを引数の最後から順番に配列の先頭に挿入する |
Array#shift | 配列の先頭の要素を取り除いてそれを返す |
Q27. 文法
以下のコードの実行結果として正しいものを選択する.
# コード ary = Array.new(3, "a") ary[0].next! p ary
4. ["b", "b", "b"]
以下, irb による実行例.
irb(main):001:0> ary = Array.new(3, "a") => ["a", "a", "a"] irb(main):002:0> ary[0].next! => "b" irb(main):003:0> p ary ["b", "b", "b"] => ["b", "b", "b"]
以下, 解説より抜粋.
- Array.new は配列オブジェクトを生成する
- new メソッドは引数として, 配列の要素数 (第一引数), 要素の初期値 (第二引数) を指定する
- Array.new で生成した配列の要素は同じオブジェクトを参照する
irb(main):011:0> ary = Array.new(3, "a") => ["a", "a", "a"] irb(main):012:0> ary[0].object_id => 47263034434960 irb(main):013:0> ary[1].object_id => 47263034434960 irb(main):014:0> ary[2].object_id => 47263034434960
尚, 以下ように Array[]
で配列を生成した場合には, 結果が異なる (各要素のオブジェクトが異なる) ので注意.
irb(main):016:0> ary = Array['a', 'a', 'a'] => ["a", "a", "a"] irb(main):017:0> ary[0].object_id => 47263033872900 irb(main):018:0> ary[1].object_id => 47263033872860 irb(main):019:0> ary[2].object_id => 47263033872840 irb(main):008:0> ary = Array['a', 'a', 'a'] => ["a", "a", "a"] irb(main):009:0> ary[0].next! => "b" irb(main):010:0> p ary ["b", "a", "a"] => ["b", "a", "a"]
フムフム.