ようへいの日々精進XP

よかろうもん

2018 年 07 月 11 日 (水)

ジョギング

  • 香椎浜 x 2 周
  • 右足の太ももの前に痛み
  • ちょっと休むかな...

日課

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

体調

  • 先週末から体調がイマイチ
  • ずーっと眠気がひどい

今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (2) オブジェクト指向系問題 (1) ~

irb に動作確認環境は以下の通り.

$ ruby --version
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux]
$ irb --version
irb 0.9.6(09/06/30)

オブジェクト指向 (1)

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

class A
  private
  def foo
    puts 'A'
  end
end

class B < A
  public :foo
end

B.new.foo

以下, 解答.

  1. A と表示される

以下, irb による確認.

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

以下, 解説より抜粋.

  • A クラスの private メソッド foo は, サブクラス B で public に再定義されている

オブジェクト指向 (2)

以下の実行結果になるように, [ x ] に記述する適切なコードを全て選ぶ.

# コード
class X
  [ x ]
  
  def initialize
    @x = 0
  end
end

a = X.new
a.x = 10
puts a.x

# 実行結果
10

以下, 解答.

# 解答 1
attr_reader :x
attr_writer :x

# 解答 2
attr_accessor :x

# 解答 3
def x
  @x
end
def x=(x)
  @x = x
end

以下, irb にて確認.

irb(main):001:0> class X
irb(main):002:1>   attr_reader :x
irb(main):003:1>   attr_writer :x  
irb(main):004:1> 
irb(main):005:1*   def initialize
irb(main):006:2>     @x = 0
irb(main):007:2>   end
irb(main):008:1> end
=> :initialize
irb(main):009:0> 
irb(main):010:0* a = X.new
=> #<X:0x0056354d43f2f0 @x=0>
irb(main):011:0> a.x = 10
=> 10
irb(main):012:0> puts a.x
10
=> nil
irb(main):013:0> a = X.new
=> #<X:0x0056354d429090 @x=0>
irb(main):014:0> a.x = 10
=> 10
irb(main):015:0> puts a.x
10
=> nil
irb(main):016:0> 
irb(main):017:0* class X
irb(main):018:1>   attr_accessor :x
irb(main):019:1> 
irb(main):020:1*   def initialize
irb(main):021:2>     @x = 0
irb(main):022:2>   end
irb(main):023:1> end
=> :initialize
irb(main):024:0> 
irb(main):025:0* a = X.new
=> #<X:0x0056354d3e04f8 @x=0>
irb(main):026:0> a.x = 10
=> 10
irb(main):027:0> puts a.x
10
=> nil
irb(main):028:0> class X
irb(main):029:1>   def x
irb(main):030:2>     @x
irb(main):031:2>   end
irb(main):032:1>   def x=(x)
irb(main):033:2>     @x = x
irb(main):034:2>   end
irb(main):035:1> 
irb(main):036:1*   def initialize
irb(main):037:2>     @x = 0
irb(main):038:2>   end
irb(main):039:1> end
=> :initialize
irb(main):040:0> 
irb(main):041:0* a = X.new
=> #<X:0x0056354d2c5780 @x=0>
irb(main):042:0> a.x = 10
=> 10
irb(main):043:0> puts a.x
10
=> nil

オブジェクト指向 (3)

以下の実行結果になるように, [ x ] に記述する適切なコードを選ぶ.

class Hoge
  def fuga(o = nil)
    [ x ]
  end
  
  private
  
  def hoge
    puts 'Hoge'
  end
end

以下, 解答.

hoge

以下, irb による確認.

irb(main):001:0> class Hoge
irb(main):002:1>   def fuga(o = nil)
irb(main):003:2>     hoge
irb(main):004:2>   end
irb(main):005:1>   
irb(main):006:1*   private
irb(main):007:1>   
irb(main):008:1*   def hoge
irb(main):009:2>     puts 'Hoge'
irb(main):010:2>   end
irb(main):011:1> end
=> :hoge

以下, 解説より抜粋.

  • private メソッドは, レシーバを指定した呼び出しは出来ない

フムフム.