Rubyでのreturnの書き方と明示的に設定する方法を解説
returnとは
returnはRubyにおいてメソッドの処理を中断し値を返す文です。メソッドの中でreturnを書くと、以降の処理は行われず、returnに渡した値がメソッドの返り値となります。
本記事では、returnの基本的な使い方や、実はreturnは省略できるという事実、省略して書かない方がいいのはどういう場合なのか、などを解説します。
Rubyでのreturnの基本的な書き方
returnの基本的な使い方と省略する書き方を見ていきます。基本的には省略しても問題ありませんが、後ほど省略してはいけない場合や省略しない方がいい場合を紹介するので、基本的な使い方は覚えておきましょう。
Rubyでreturnを明示的に設定する方法
return文の基本的な書き方を見ていきましょう。基本的にreturnはメソッドの中で用います。次のコードは渡された数値に2を足して返すメソッドです。
def add2(num)
result = num + 2
return result
end
簡単な例ですが、実行してみましょう。
> add2(0)
2
> add2(5)
7
メソッドのように
def add2(num)
result = num + 2
return(result)
end
とかっこを付けて値を渡すこともできますが、あまり一般的ではないので基本的にはスペースを空けて値を渡します。
Rubyではreturnを省略できる
実はRubyではメソッドの最後に評価された値がメソッドの返り値となるので、returnは省略して書くことも可能です。先ほどのadd2メソッドは次のように書いても同じです。
def add2(num)
result = num + 2
result
end
または
def add2(num)
num + 2
end
「評価された値」とは簡単に言えば「実行された結果の値」を意味します。変数が評価されたら変数の中身が返り、メソッドや計算が評価されると、そのメソッドの返り値や計算結果が評価された値となります。
returnは文である
先ほど、returnは「値を返す文」だと書きました。Rubyの命令は大きく分けて「値を返す式」と「値を返さない式」があります。値を返さない式を特に「文」と呼び、whileやreturnなどが文に属しています。
今の段階でreturnが文かどうかはそれほど重要ではありませんが、Rubyをさらに深く理解し、より便利に使っていくためには知っておくといいでしょう。ちなみに、Ruby以外の言語ではifは「if文」と呼ばれるように、値を返さない式に属しているのですが、Rubyではifは式なので、値を返します。
> result = if true
> 3
> else
> 4
> end
> result
3
コード量を減らす際にこのテクニックはよく使います。
returnを使用した方がよい場合
Rubyではほとんどの場面でreturnを明示的に書かなくても済みます。一方で明示的にreturnを書かないといけない場合や、書いた方がいい場合もあるので紹介します。
コーディング規約に省略しないと書いてある
プロジェクトによっては、コーディング規約が用意されてあったり、既存のコーディング規約に沿ってコーディングして下さいと、お願いされる場合があります。もしプロジェクトのコーディング規約に、returnは省略しないと書いてあれば、個人の好き嫌い関係なく、returnは明示的に書かなくてはなりません。
プロジェクトにRubyをメインで扱っていないメンバがいる場合や、開発メンバが多くコードの品質を一定に保ちたい場合などに、returnを明示的に書くコーディング規約が採用されることが多いです。
ある特定の条件の場合に別の値を返したい場合
先ほども書きましたが、ifは式なのでreturnを書かずに、中身がif式だけのメソッドを作ることができます。
def add100(num)
if num < 100
num + 100
else
num
end
end
これぐらいのif式であれば、後述のif式を使った方がコード量を少なく、かつ見やすくなります。
def add100(num)
num + 100 if num < 100
num
end
しかし、実行してみるとnum < 100の場合でも、メソッドの返り値は引数に渡した数がそのまま返ってきます。
> add100(50)
50
> add100(110)
110
これは、メソッドの最後に評価された値がnumだからです。numが100より小さい場合に100を足して返すには、returnで明示的に値を返す必要があります。
def add100(num)
return num + 100 if num < 100
num
end
> add100(50)
150
> add100(110)
>110
このように、後述のif式を使う場合は、セットでreturnを使うと覚えておきましょう。
以降の処理を実行しなくてもいい場合
3つ目は、ループ処理の中でよく使われるreturnです。まずは次のコードを見てください。
def search_item(num)
result = nil
items.each do |item|
result = item if item.number = num
end
result
end
一見よくある感じのコードですが、検索対象がリストのどこにあっても、リストをすべて走査してしまい、非効率です。そこで、明示的にreturnを書き、見つけ次第ループから抜け出すように修正しましょう。
def search_item(num)
items.each do |item|
return item if item.number = num
end
nil
end
最後にnilを書かないと、見つからなかった場合itemsが返り値となってしまいます。以降の処理を実行する必要が無い場合は、早めにreturnで値を返すようにしましょう。
複数の値を返したい場合
4つ目はreturnを使って、複数の値を返す方法を紹介します。あまり利用する場面は多くないですが、一つのメソッドから、複数の値を返すことができると便利な場合があります。returnを使わない場合では、一旦配列にしてから返すという方法があります。
def swap(x, y)
[y, x]
end
> a = 1
> b = 3
> a, b = swap(a, b)
>a
3
> b
1
これをreturnを使って書きます。
def swap(x, y)
return y, x
end
> a, b = swap(a, b)
配列にせずに、カンマ区切りでreturnに渡すことで、複数の値を返すことができます。returnを使った場合でも、swapメソッドは配列を返すようになるので、結果的には使わない場合と同じになるのですが、より直観的に書くことができます。
使いどころをおさえて効率の良いコーディングを
コーディング規約で規定されている場合を除いて必ずしもreturnを書く必要はありません。しかし、使いどころをおさえて適切に使うことで読みやすく、効率的なコードを書けるようになります。
【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?
近年プログラミングを勉強する人が増えています。
プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。
多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない
TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。
TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。
本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。
tech boostについて
オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。
tech boost卒業生インタビュー
tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん
tech boostの口コミ
TechBoostお金を払ったかいがあってすごく手厚いサービスで今のところすごく満足。
— Yatsushi@将来宇宙旅行します (@yatsushiGUN) 2019年1月18日
今日もスクールに通ってる人同士の交流会みたいなのもあってすごく有意義に過ごせた。#techboost#プログラミング
@tech_boost のカウンセリング完了!
— kinsu (@waraiotoko8) 2018年8月17日
いやー、ノウハウの宝庫!
カウンセリングだけでも凄い収穫!
プログラミングだけではなく起業や転職支援についても色々聞けた。
即断即決!その場で申し込み完了。
遅くても来年の春までに起業します!
僕の場合、これが現実的な最適解!
全てが楽しみだー!