Rubyのメソッド定義を完全ガイド!defから戻り値まで初心者向けに徹底解説
生徒
「Rubyで何度も使う同じ処理を、一つにまとめる方法はありますか?」
先生
「はい、それこそが『メソッド』の役割です。defを使って処理に名前を付けておけば、いつでも呼び出せるようになりますよ。」
生徒
「メソッドを作るときに『戻り値』という言葉を聞いたのですが、これはどういう意味ですか?」
先生
「良い点に気づきましたね!戻り値は、メソッドが仕事を終えた後に返してくれる『お土産』のようなものです。Ruby特有の『暗黙のreturn』についても一緒に学んでいきましょう!」
1. メソッドとは?何度も使う処理を一つにまとめる魔法の箱
プログラミングをしていると、「挨拶を表示する」「合計金額を計算する」といった同じ作業を何度も繰り返す場面が出てきます。その度に同じコードを書くのは大変ですし、もし内容を少し変えたいと思ったら、すべての場所を書き直さなければなりません。
そこで登場するのがメソッドです。メソッドとは、複数の命令を一つの「塊(かたまり)」としてまとめ、それに好きな名前を付けたものです。
パソコンを触ったことがない方でも、「電子レンジ」をイメージすれば簡単です。電子レンジの中には「温める」という複雑な仕組みが隠れていますが、私たちは「あたためボタン」を押すだけでその機能を使えますよね。この「あたためボタン」が、プログラミングにおけるメソッドの名前なのです。
Rubyの文法を基礎からしっかり固めたい人や、 現場で役立つ「テスト駆動開発」の考え方まで身につけたい人には、 評価の高いこの一冊がおすすめです。
プロを目指す人のためのRuby入門をAmazonで見る※ Amazon広告リンク
2. メソッド定義の基本!defとendの書き方ルール
Rubyでメソッドを作ることを「メソッドを定義(ていぎ)する」と言います。定義するには、def(デフ)とend(エンド)という言葉を使います。
defは英語の「define(定義する)」の略です。書き方は非常にシンプルで、def メソッド名で始めて、最後にendで閉じます。その間に、実行したい処理を書きます。
# 挨拶をするメソッドを定義する
def say_hello
puts "みなさん、こんにちは!"
puts "Rubyの勉強を始めましょう。"
end
# メソッドを呼び出す(実行する)
say_hello
このコードを書くだけで、say_helloという名前を呼ぶたびに、二行の挨拶が表示されるようになります。
3. 戻り値とは?仕事を終えたメソッドが返してくれる結果
メソッドには「ただ命令を実行するだけのもの」と「計算した結果を返してくれるもの」の二種類があります。この、メソッドが最後に返してくれる結果のことを戻り値(もどりち)、または返り値(かえりち)と言います。
日常生活で例えると、あなたが誰かにおつかいを頼んだとします。「パンを買ってきて」と頼んで、相手がパンを持って帰ってきたら、その「パン」が戻り値です。
プログラムでは、メソッドの中で計算した数字や、加工した文字を戻り値として受け取り、それを別の場所で使ったり変数に保存したりします。
4. Rubyの大きな特徴!暗黙のreturnを理解しよう
他のプログラミング言語では、戻り値を指定するときに必ず「return(リターン)」という言葉を書く必要があります。しかし、Rubyには暗黙のreturn(あんもくのリターン)という便利な仕組みがあります。
これは、「メソッドの中で一番最後に評価(計算)された値が、自動的に戻り値になる」というルールです。つまり、わざわざ「これを返します!」と書かなくても、Rubyが空気を読んで最後の結果を届けてくれるのです。
# 二つの数字を足し算するメソッド
def add_numbers
result = 10 + 20
result # これが最後の一行なので、自動的に戻り値になる
end
# メソッドの戻り値を変数に入れる
total = add_numbers
puts "合計は #{total} です"
合計は 30 です
5. returnをあえて使う場面!処理を途中で切り上げる方法
「暗黙のreturnがあるなら、言葉としてのreturnは使わないの?」と思うかもしれません。実は、returnを直接書くこともあります。それは、「処理を途中で終わりにして、すぐに結果を返したいとき」です。
例えば、ある条件に当てはまったら、それ以降の難しい計算はせずにすぐ答えを出したい場合などに使います。
def check_lucky_number
number = 7
if number == 7
return "ラッキーセブンです!" # ここでメソッドが終了する
end
"普通の数字です" # 上のreturnが動くと、この行は無視される
end
puts check_lucky_number
このように、returnを使うと、その瞬間にメソッドの実行が終了し、呼び出した場所へ戻ります。
6. メソッド名に使える文字と命名のコツ
メソッドには自由に名前を付けることができますが、いくつかルールとマナーがあります。
- 基本は小文字:
calculate_priceのように、小文字のアルファベットを使います。 - スネークケース: 単語の間は
_(アンダースコア)で繋ぎます。蛇のように見えるのでそう呼ばれます。 - 役割がわかる名前に: 「do_it」よりも「print_invoice」のように、何をするメソッドか一目でわかる名前が好まれます。
また、Rubyではメソッド名の最後に?や!を付けることもできます。is_empty?のように「?」を付けると「~ですか?」と尋ねる(真偽値を返す)メソッドという意味になり、非常に読みやすくなります。
7. 戻り値がないメソッド?nilの正体
すべてのメソッドには必ず戻り値がありますが、中には「中身がない値」を返すことがあります。それがnil(ニル)です。
例えば、putsで文字を表示するだけのメソッドを作った場合、表示自体は行われますが、メソッドとしての「お土産(戻り値)」は空っぽのnilになります。
def just_print
puts "表示するだけ"
end
result = just_print
p result # resultの中身を確認する
表示するだけ
nil
pというのは、中身を詳しく見るための命令です。nilが表示されたことで、このメソッドには実質的な戻り値がなかったことがわかります。
8. 変数のスコープ!メソッドの中と外の境界線
メソッドを理解する上で非常に重要なのがスコープ(範囲)です。
メソッドの中で作った変数は、そのメソッドの中でしか使えません。逆に、メソッドの外で作った変数を勝手にメソッドの中で使うこともできません。
これは「プライバシーを守る壁」のようなものです。メソッドごとに変数を独立させることで、他の場所で同じ名前の変数を使っていても、データが混ざって壊れてしまうのを防いでいます。この独立性の高さが、大規模なプログラムを作るときにとても役立ちます。
9. 実務で役立つ!メソッドを細かく分けるメリット
一つのメソッドに何百行も処理を書くのは、あまり良い書き方ではありません。プロのプログラマーは、一つのメソッドには「一つの役割」だけを持たせるように、細かく分割して作ります。
細かく分けることで、以下のメリットがあります。
- どこが間違っているか見つけやすい: 壊れた部品だけを特定できます。
- 使い回しができる: 同じ部品を他の場所でも再利用できます。
- コードが物語のように読める: 名前が付いているので、処理の流れが追いやすくなります。
10. メソッドを使いこなしてRubyをもっと楽しく!
パソコンを触ったことがない方にとって、最初は「なぜわざわざ名前を付けてまとめるの?」と不思議に思うかもしれません。
でも、少しずつコードが長くなってくると、この「メソッド」という仕組みのありがたみが分かってきます。自分だけの便利な道具箱を作るような感覚で、色々な処理をメソッドにまとめてみてください。
Rubyの「暗黙のreturn」に慣れてくると、コードが驚くほどスッキリと美しく書けるようになります。まずは身近な計算や、決まった挨拶を表示することから始めて、Rubyという魔法の杖を自由に操れるようになりましょう!