ようへいの日々精進XP

よかろうもん

2018 年 05 月 01 日(火)

ジョギング

  • 香椎浜 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
  1. 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"]

フムフム.