ようへいの日々精進XP

よかろうもん

2018 年 03 月 02 日(金)

ジョギング

  • 新橋のホテルから皇居まで, 皇居を一周周って 9.5 キロくらい
  • 久しぶりにイイ感じで走れた

日課

  • お休み

出張終わり

  • かなり疲れた
  • 気軽に食べたいものが無くて, 昨晩の夜ご飯と同様に空港のロビーで鮨をつまむ

夕飯

  • 奥さんの鍋
  • 顎に痛みがあって辛かった

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

もう何度か解いているけど, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.

Q21. アクセサメソッド

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

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

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

# 実行結果
Hello, Suzuki

読み書き出来るアクセサメソッドを指定する必要がある.

attr_accessor

以下, 解説より抜粋.

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

以下, 実行例.

[6] pry(main)> class Person
[6] pry(main)*   attr_accessor :name  
[6] pry(main)* end  
=> nil
[7] pry(main)> 
[8] pry(main)> person = Person.new
=> #<Person:0x00005619c58bba48>
[9] pry(main)> person.name = 'Suzuki'
=> "Suzuki"
[10] pry(main)> puts 'Hello, ' + person.name
Hello, Suzuki
=> nil

Q22. 正規表現

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

# コード
/(\d+)/ =~ "hello24world"
puts __(1)__

# 実行結果
24

以下, 解説より抜粋.

  • 正規表現内の丸括弧を記述 (キャプチャ) することで, その位置にマッチした文字列を参照可能
  • 丸括弧は正規表現内で複数使用可能, 一致した文字列は丸括弧が出現した順番に, 特殊変数 $1, $2, $3...の順番で代入される

$1

以下, 実行例.

[1] pry(main)> /(\d+)/ =~ "hello24world" 
=> 5
[2] pry(main)> puts $1
24
=> nil

以下, も少し突っ込んだ実行例.

[1] pry(main)> /([a-z]*)(\d+)([a-z]*)/ =~ "hello24world"
=> 0
[2] pry(main)> $1
=> "hello"
[3] pry(main)> $2
=> "24"
[4] pry(main)> $3
=> "world"

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

以下のコマンドの実行結果から__(1)__に当てはまるものを選択してください.

# コマンドライン
$ ruby __(1)__ 'p 1024 * 5'


# 実行結果
5120

-e

以下, 解説より抜粋.

  • -e オプションは引数で指定した文字列を評価して, 結果を出力するオプション

ちなみに, 他の選択肢について. こちらより抜粋.

オプション 機能
-r feature スクリプト実行前に feature で指定されるライブラリを Kernel.#require する
-s スクリプト名に続く, - で始まる引数を解釈して, 同名のグローバル変数に値 を設定する
-v 冗長モード

Q24. クラス

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

# コード
class Person
 def __(1)__(name)
  @name = name
 end
 def info
  puts "My name is #{@name}."
 end
end
Person.new("Jim").info

# 実行結果
My name is Jim.

initialize

以下, 解説より抜粋.

  • initialize メソッドは, オブジェクトの初期化処理を定義するメソッド
  • オブジェクトが生成される際に呼び出される

実際の実行結果.

[3] pry(main)> class Person
[3] pry(main)*   def initialize(name) 
[3] pry(main)*     @name = name  
[3] pry(main)*   end   
[3] pry(main)*   def info 
[3] pry(main)*     puts "My name is #{@name}."  
[3] pry(main)*   end   
[3] pry(main)* end  
=> :info
[4] pry(main)> Person.new("Jim").info
My name is Jim.
=> nil

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

以下, 解説より抜粋.

実際の実行結果.

[6] pry(main)> class Class1
[6] pry(main)*   def set_value(value) 
[6] pry(main)*     @value = value  
[6] pry(main)*   end   
[6] pry(main)*   
[6] pry(main)*   def get_value 
[6] pry(main)*     return @value  
[6] pry(main)*   end   
[6] pry(main)* end  
=> :get_value
[7] pry(main)> 
[8] pry(main)> obj1 = Class1.new
=> #<Class1:0x00005626ba1f7250>
[9] pry(main)> obj1.set_value("value1")
=> "value1"
[10] pry(main)> puts obj1.get_value
value1
=> nil
[11] pry(main)> obj2 = Class1.new
=> #<Class1:0x00005626bae2a040>
[12] pry(main)> puts obj2.get_value

=> nil

ふむふむ.