7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

チェリー本で学ぶ「Rubyのメソッド定義と戻り値」return・ガード節を整理してみた

7
Last updated at Posted at 2026-03-13

はじめに

「プロを目指す人のためのRuby入門」(通称チェリー本)の2章を学習しました。
本記事では2.6「メソッドの定義」で学んだことをまとめます。

※最後に理解を深めるためのクイズも用意しています。

想定読者

  • Rubyを学び始めたばかりの人
  • メソッドの定義や戻り値の概念を整理したい人

メソッドの定義

Rubyではdefendでメソッドを定義します。

def sum(price, tax)
  price + tax
end

puts sum(1000, 100) # => 1100

メソッド名はスネークケースで書くのがRubyの慣習です。

# Good
def user_name
end

# Bad(Rubyではキャメルケースは使わない)
def userName
end

戻り値

メソッドを呼び出したときに返ってくる値を戻り値と言います。

Rubyの特徴として、最後に評価された式が自動的に戻り値になります
JavaやPHPのように必ずreturnを書く必要はありません。

def welcome_message(language)
  if language == 'japanese'
    'こんにちは' # languageが'japanese'の場合の戻り値
  else
    'hello'  # それ以外の場合の戻り値
  end
end

puts welcome_message('japanese') # => こんにちは
puts welcome_message('english') # => hello

returnの使いどころ

Rubyにもreturnはあります。ただし使い方が他言語と異なります。

メソッドの最後では使わない

# Bad(冗長)
def sum(price, tax)
  return price + tax
end

# Good(Rubyらしい)
def sum(price, tax)
  price + tax
end

ガード節で使う

returnが活きるのはメソッドを途中で打ち切りたい場面です。
異常なケースを先に弾くこの書き方をガード節と呼びます。
ネスト(入れ子)を減らすことで、コードの可読性を高める書き方です。

def welcome_message(language)
  return '言語を入力してください' if language.nil? # 異常ケースを先に弾く

  if language == 'japanese'
    'こんにちは'
  else
    'hello'
  end
end

puts welcome_message(nil)     # => 言語を入力してください
puts welcome_message('japanese') # => こんにちは

ガード節を使わないと入れ子が深くなり、読みにくいコードになります。

# ガード節なし(読みにくい)
def welcome_message(language)
  if language.nil?
    '言語を入力してください'
  else
    if language == 'japanese'
      'こんにちは'
    else
      'hello'
    end
  end
end

デッドコードに注意

returnの後に書いたコードは実行されないので要注意です。

def total_price(price, quantity)
  result = price * quantity
  return result
  puts "計算しました" # ← ここには絶対に到達しない(デッドコード)
end

正しくはこう書きます。

def total_price(price, quantity)
  result = price * quantity
  puts "計算しました"
  result # returnは不要
end

()のルール

Rubyではメソッド呼び出し時の()を省略できます。
ただし、可読性のために次のような書き方がよく使われます。

場面 主流
引数なしのメソッド定義 省略する def user_name
引数ありのメソッド定義 つける def welcome_message(language)
メソッドの呼び出し 省略することが多い puts user_name

まとめ

  • メソッド名はスネークケースで書く
  • Rubyは最後の式が自動的に戻り値になる
  • メソッドの最後でreturn不要
  • returnガード節(途中で処理を打ち切る)で使う
  • ()引数があるときにつける、ないときは省略

理解度チェッククイズ

Q1. 以下のメソッドの戻り値は何ですか?

def sum(price, tax)
  price + tax
end

sum(1000, 100)
答えを見る A. 1100

Rubyは最後に評価された式が戻り値になります。returnは不要です。


Q2. 以下のコードの問題点はどこですか?

def total(price, quantity)
  result = price * quantity
  return result
  puts "計算完了"
end
答えを見る

return result の後に puts "計算完了" があるため、puts は絶対に実行されません。
これをデッドコードと言います。

正しくはこう書きます。
A.

def total(price, quantity)
  result = price * quantity
  puts "計算完了"
  result
end

Q3. returnを使うべき場面はどんな時ですか?

答えを見る

A. ガード節として、異常なケースを先に弾いてメソッドを途中で打ち切りたい時に使います。

def welcome_message(language)
  return '言語を入力してください' if language.nil?

  if language == 'japanese'
    'こんにちは'
  else
    'hello'
  end
end

Q4. 以下のうちRubyの慣習として正しい書き方はどれですか?

# A
def userName
end

# B
def user_name
end

# C
def UserName
end
答えを見る

A. B def user_name

Rubyのメソッド名はスネークケースで書くのが慣習です。

  • キャメルケース(userName)はJavaなどの慣習でRubyでは使いません。
  • アッパーキャメルケース(UserName)はRubyではクラス名に使います。

Q5. 引数ありのメソッドを定義するとき、()はつけますか?

答えを見る

A. つけます。

# Good
def welcome_message(language)
end

# 省略できるが慣習としてつける
def welcome_message language
end

# 引数がない場合は省略するのが主流。
def user_name # Good
end

参考

本記事は以下の書籍をもとに学習内容を整理しています。

  • 「プロを目指す人のためのRuby入門」
7
0
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
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?