##対象者
・以下のRailsチュートリアル4章で出てくるfull_titleメソッドの引数(page_title = '')に違和感がある方
・デフォルト値付き引数について理解していない方
full_title(page_title = '')
・Railsチュートリアル、チェリー本で学習している方
記事の目的
Railsチュートリアル4章のfull_titleヘルパーメソッドの引数(page_title = '')の部分について理解する。
初学者で勉強のアウトプットもかねてます。間違いがあれば、ご指摘下さい。
##Railsチュートリアル4章で出てくるfull_titleの引数である(page_title = '')とは?
【リスト 4.2: full_titleヘルパーを定義する】
module ApplicationHelper
# ページごとの完全なタイトルを返します。
def full_title(page_title = '')
base_title = "Ruby on Rails Tutorial Sample App"
if page_title.empty?
base_title
else
page_title + " | " + base_title
end
end
end
以下のRailsチュートリアルの説明にあるように、タイトルがなければ空欄にならないように・タイトルがあればページにより異なるタイトルに変更できるようにする為に、full_titleメソッドを定義しています。
このとき、もしタイトルをまったく与えていなければ、タイトルが空欄になってしまいます。これを防ぐには、すべてのページで使う基本タイトルを定め、特定のページでは異なるタイトルに変更できるようなオプションを与えるのが常套手段です。
こちらで出てくるメソッドの引数である(page_title = '')の部分に私は、「なんだこれ?」と違和感を感じましが、一度流したチェリー本の[2.11.1のデフォルト値付きの引数]の部分を見たら、理解できました。
##デフォルト値付きの引数とは?(チェリー本より引用)
デフォルト値付きのメソッドの構造は以下の通り。
def メソッド(引数 = デフォルト値1, 引数2 = デフォルト値2)
# 必要な処理
end
以下はチェリー本のデフォルト値付きメソッド例文です。
def greeting(country = 'Japan')
if country == 'Japan'
'こんにちは'
else
'hello'
end
end
#メソッドの呼出の結果
greeting #=> "こんにちは"
greeting('us') #=> "hello"
上の例だと、デフォルト値は(country = 'Japan')の部分ですね。
チェリー本の解説によると、デフォルト値付きの引数は、メソッドの引数を柔軟に変える方法の1つとして紹介されています。
通常メソッドを呼び出す際に引数の過不足があるとエラーになるが、上のようにデフォルト値を設定するとgreetingと引数なしで呼び出した場合でもエラーにならず、"こんにちは"と表示されるのです。
なるほど!!まとめます。
##上の例でまとめると、、、
「空であれば、|なしで"Ruby on Rails Tutorial Sample App"と表示させたい」
「引数付きで呼び出されたら、引数 + " | " + "Ruby on Rails Tutorial Sample App"と表示させたい」
という目的に対して、
メソッドの引数を柔軟に変えられるデフォルト値付き引数である(page_title = '')
を使って、引数あり・なしで表示を変えている、と言えますね。