ようへいの日々精進XP

よかろうもん

2018 年 04 月 28 日(土)

ジョギング

  • お休み

日課

  • お休み

別府に開発合宿に

開発合宿の成果、その (1) です。

開発合宿の成果、その 2 です。ご査収ください。 お宿はこちら.

www.bokai.jp

夕飯が豪華で食べきれないくらいで満足した.

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

もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.

Q19. ライブラリ YAML

以下のコードを実行した結果を選択する.

# コード
require 'yaml'
dir = <<EOY
file1:
  name: file1.txt
  data: text
EOY
p YAML.load(dir)

{"file1"=>{"name"=>"file1.txt", "data"=>"text"}}

以下, irb による実行例.

irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> dir = <<EOY
irb(main):003:0" file1:
irb(main):004:0"   name: file1.txt
irb(main):005:0"   data: text
irb(main):006:0" EOY
=> "file1:\n  name: file1.txt\n  data: text\n"
irb(main):007:0> p YAML.load(dir)
{"file1"=>{"name"=>"file1.txt", "data"=>"text"}}
=> {"file1"=>{"name"=>"file1.txt", "data"=>"text"}}

以下, 解説より抜粋.

  • yaml ライブラリを使用することで, 人間が読めるテキスト形式でオブジェクトを表現することが出来る
  • 問題中のコードでは, まずハッシュのキー (file1) を指定し, さらにインデントでハッシュ (name:, data:) を指定しています。

Q20. コマンドラインオプション

Ruby で使用可能なオプションではないものを選択する.

-t

以下, ヘルプの抜粋.

$ ruby --version
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux]
kappa@tpX1-Carbon:~/sandbox/ruby-exam-gold$ ruby --help
Usage: ruby [switches] [--] [programfile] [arguments]
  -0[octal]       specify record separator (\0, if no argument)
  -a              autosplit mode with -n or -p (splits $_ into $F)
  -c              check syntax only
  -Cdirectory     cd to directory before executing your script
  -d, --debug     set debugging flags (set $DEBUG to true)
  -e 'command'    one line of script. Several -e's allowed. Omit [programfile]
  -Eex[:in], --encoding=ex[:in]
                  specify the default external and internal character encodings
  -Fpattern       split() pattern for autosplit (-a)
  -i[extension]   edit ARGV files in place (make backup if extension supplied)
  -Idirectory     specify $LOAD_PATH directory (may be used more than once)
  -l              enable line ending processing
  -n              assume 'while gets(); ... end' loop around your script
  -p              assume loop like -n but print line also like sed
  -rlibrary       require the library before executing your script
  -s              enable some switch parsing for switches after script name
  -S              look for the script using PATH environment variable
  -T[level=1]     turn on tainting checks
  -v, --verbose   print version number, then turn on verbose mode
  -w              turn warnings on for your script
  -W[level=2]     set warning level; 0=silence, 1=medium, 2=verbose
  -x[directory]   strip off text before #!ruby line and perhaps cd to directory
  --copyright     print the copyright
  --enable=feature[,...], --disable=feature[,...]
                  enable or disable features
  --external-encoding=encoding, --internal-encoding=encoding
                  specify the default external or internal character encoding
  --version       print the version
  --help          show this message, -h for short message
Features:
  gems            rubygems (default: enabled)
  rubyopt         RUBYOPT environment variable (default: enabled)

他の選択肢について.

オプション 用途
-e script コマンドラインからスクリプトを指定する. ruby -e 'puts "hello world."'
-d デバッグモードでスクリプトを実行する.
-r feature スクリプト実行前に feature で指定されるライブラリを Kernel.#require する.

Q21. オブジェクト指向

以下のコードの実行結果から__(1)__に当てはまるものを選択する.

# コード
class Person
 __(1)__ :name
end

person = Person.new
person.name = "Suzuki"
puts "Hello, " + person.name

# 実行結果
Hello, Suzuki

attr_accessor

以下, irb による実行例.

irb(main):001:0> class Person
irb(main):002:1>  attr_accessor :name
irb(main):003:1> end
=> nil
irb(main):004:0> 
irb(main):005:0* person = Person.new
=> #<Person:0x005620e3f60838>
irb(main):006:0> person.name = "Suzuki"
=> "Suzuki"
irb(main):007:0> puts "Hello, " + person.name
Hello, Suzuki
=> nil

他の選択肢について.

メソッド名 用途
attr_reader :name :name で指定した名前のインスタンス変数 @name に設定された値を返すメソッドを定義する. オブジェクト.name でアクセスする.
attr_writer :name :name で指定した名前のインスタンス変数 @name に値を設定するメソッドを定義する. オブジェクト.name=(引数) で定義する.
attr_accessor :name 上記 2 つのメソッドの両方を呼び出すメソッド. インスタンス変数の参照と変更が出来る.

フムフム.