ジョギング
- 新橋のホテルから皇居まで, 皇居を一周周って 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
以下, 解説より抜粋.
@
で始まる名前の変数はインスタンス変数となる- インスタンス変数はインスタンスメソッド内で使用する
- インスタンス変数はオブジェクト毎に異なるデータを保持する
- 初期化せず参照してもエラーにならず,
nil
が返る
実際の実行結果.
[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
ふむふむ.