LoginSignup
6
2

More than 3 years have passed since last update.

デフォルト値付きの引数 Railsチュートリアルのfull_titleメソッドを例に

Last updated at Posted at 2020-10-31

対象者

・以下の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ヘルパーを定義する】

app/helpers/application_helper.rb
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 = '')
を使って、引数あり・なしで表示を変えている、と言えますね。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2