ようへいの日々精進XP

よかろうもん

2018 年 03 月 06 日(火)

ジョギング

  • まだ休み
  • 筋肉痛が続く...
  • 一応, 香椎浜を散歩

日課

  • (腕立て x 50 + 腹筋 x 30) x 3
  • 一応, やれるところから

夕飯

  • 久しぶりに鍋

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

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

Q31. モジュール関数 

以下の結果を出力するコードとして__(1)__に当てはまるものを選択してください.

# コード
module Mod
 __(1)__
 def func
  puts "Hello Module"
 end
end

Mod.func

# 実行結果
Hello Module

module_function

以下, 解説より抜粋.

  • 「モジュール名.メソッド名」の形式で呼び出せるメソッドをモジュール関数と呼ぶ
  • モジュール関数を定義する場合, メソッドの前に module_function を記述する

以下, 実行例.

[5] pry(main)> module Mod
[5] pry(main)*   module_function 
[5] pry(main)*   def func 
[5] pry(main)*     puts "Hello Module"  
[5] pry(main)*   end   
[5] pry(main)* end  
=> :func
[6] pry(main)> 
[7] pry(main)> Mod.func
Hello Module
=> nil

Q32. 特異メソッド

以下のコードの説明として正しいものを選択してください.

# コード
obj = Object.new
def obj.hello
  puts "hello"
end
obj.hello
Object.new.hello

7 行目で例外 (NoMethodError) が発生する

以下, 解説より抜粋.

  • 特異メソッドとは, 特定のオブジェクトにのみメソッドを定義すること
  • 特異メソッドは obj.hello のように オブジェクト名.メソッド名 で定義する
  • インスタンスメソッドは定義されていないので, 7 行目で NoMethodError となる

以下, 実行例.

[8] pry(main)> obj = Object.new
=> #<Object:0x000055577e857b88>
[9] pry(main)> def obj.hello
[9] pry(main)*   puts "hello"  
[9] pry(main)* end  
=> :hello
[10] pry(main)> obj.hello
hello
=> nil
[11] pry(main)> Object.new.hello
NoMethodError: undefined method `hello' for #<Object:0x000055577f4a0f48>

Q33. 引数のデフォルト値

以下の結果を出力するコードとして__(1)__に当てはまるものを選択してください.

# コード
def foo(__(1)__)
  puts arg
end
foo

# 実行結果
default

arg = 'default'

以下, 解説より抜粋.

  • メソッド定義時に引数にデフォルト値を指定することが出来る
  • デフォルト値の指定は 引数名 = デフォルト値 という形式で指定する

以下, 実行例.

[12] pry(main)> def foo(arg = 'default')
[12] pry(main)*   puts arg  
[12] pry(main)* end  
=> :foo
[13] pry(main)> foo
default
=> nil

ふむふむ.