ようへいの日々精進XP

よかろうもん

2018 年 07 月 22 日 (日)

ジョギング

  • 香椎浜 x 3 周
  • 今日は朝の 8 時前から走り始めた
  • いい感じで涼しくて走り易かった

日課

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

奥さんとカラオケデート

奥さんのヴォーカルレッスンに付き合っている。

  • 香椎のジャンカラに朝 10 時前から並んで奥さんとカラオケデート
  • 奥さんはボーカルのトレーニングに通っていたりしたので, 歌はウマイと思っているし, 自分もカラオケは好きなので奥さんとの共通の趣味的なものが出来てうれしい
  • 最近のカラオケマシンはすごく進化していて, 歌っている様子を録画してインターネットと共有出来たりするのに驚きながら二時間程ワイワイしてとても楽しかった

今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (12) 文法 (2) ~

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

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

文法 (5)

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

# コード
while [ x ].gets
puts $_ if $_ =~ /Ruby/
end
[ y ]
java programming
Ruby programming
C programming

# 実行結果
Ruby programming

以下, 解答.

  1. [ x ] = DATA, [ y ] = __END__

以下, スクリプトによる確認.

$ cat q10.rb 
while DATA.gets
puts $_ if $_ =~ /Ruby/
end
__END__
java programming
Ruby programming
C programming
$ ruby q10.rb 
Ruby programming

以下, 解説より抜粋.

  • __END__ 以降に記述した内容は, File オブジェクト DATA から読み出すことが出来る

以下, ドキュメントより抜粋.

  • constant Object::DATA
  • スクリプトの __END__ プログラムの終り以降をアクセスする File オブジェクト
  • ソースファイルの __END__ 以降は解析, 実行の対象にならないので, その部分にプログラムが利用するためのデータを書き込んでおくことができる
$ cat q10-1.rb
p DATA.gets
p DATA.gets
p DATA.gets
__END__
foo
bar
baz
$ ruby q10-1.rb
"foo\n"
"bar\n"
"baz\n"

文法 (6)

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

# コード
def method
  puts 'Hello, World'
end

[ x ]

def method
  old_method
  puts 'Hello, Ruby World'
end

method

# 実行結果
Hello, World
Hello, Ruby World

以下, 解答.

  1. alias old_method method

以下, irb による確認.

irb(main):001:0> def method
irb(main):002:1>   puts 'Hello, World'
irb(main):003:1> end
=> :method
irb(main):004:0> 
irb(main):005:0* alias old_method method
=> nil
irb(main):006:0> 
irb(main):007:0* def method
irb(main):008:1>   old_method
irb(main):009:1>   puts 'Hello, Ruby World'
irb(main):010:1> end
=> :method
irb(main):011:0> 
irb(main):012:0* method
Hello, World
Hello, Ruby World
=> nil

以下, 解説より抜粋.

  • alias は, 第一引数に新しいメソッド名, 第二引数に旧メソッド名を指定する
  • メソッド名は, 識別子かシンボルで記述する (文字列では記述出来ない)
# シンボル指定
irb(main):001:0> def method
irb(main):002:1>   puts 'Hello, World'
irb(main):003:1> end
=> :method
irb(main):004:0> 
irb(main):005:0* alias :old_method :method
=> nil
irb(main):006:0> 
irb(main):007:0* def method
irb(main):008:1>   old_method
irb(main):009:1>   puts 'Hello, Ruby World'
irb(main):010:1> end
=> :method
irb(main):011:0> 
irb(main):012:0* method
Hello, World
Hello, Ruby World
=> nil

# シンボルと識別子のハイブリッド
irb(main):013:0> def method
irb(main):014:1>   puts 'Hello, World'
irb(main):015:1> end
=> :method
irb(main):016:0> 
irb(main):017:0* alias :old_method method
=> nil
irb(main):018:0> 
irb(main):019:0* def method
irb(main):020:1>   old_method
irb(main):021:1>   puts 'Hello, Ruby World'
irb(main):022:1> end
=> :method
irb(main):023:0> 
irb(main):024:0* method
Hello, World
Hello, Ruby World
=> nil

文法 (7)

Q18. 以下のコードと同じ実行結果になるコードはどれか.

# コード
a, b = [1, 2]

以下, 解答.

  1. a = 1 b = 2

以下, irb にて確認.

irb(main):001:0> a, b = [1, 2]
=> [1, 2]
irb(main):002:0> p a
1
=> 1
irb(main):003:0> p b
2
=> 2

以下, 解説より抜粋.

  • 配列の多重代入
  • 左辺には, 右辺の同じ位置にある値が代入される

フムフム.