Rubyのelse文とは?
Rubyのelse文は、わかりやすくいうと「それ以外の場合」という処理を書くための仕組みです。
日常生活でも私たちは「もし晴れなら散歩に行く、そうでなければ家で読書をする」といった判断をしていますよね。
プログラミングでも同じように、条件が当てはまらない場合の処理を書きたい場面がたくさんあります。
if文だけでは「条件が当てはまる場合」の処理しか書けませんが、elseを追加することで「条件が当てはまらない場合」の処理も書けるようになります。
これにより、どんな状況でも適切に動作するプログラムを作ることができるようになるのです。
例えば、下記のようなケースでは重宝します。
- ユーザーがログインしているかどうかで表示内容を変えたいとき
- データが存在するかどうかで処理を分けたいとき
- エラーが発生した場合の対処法を用意したいとき
else文はその特性ゆえに、プログラムの「保険」のような役割も果たします。例外的なケースや予期しない状況の処理をあらかじめ用意しておけるからです。
不測の事態が起きても、適切に対応できる安全なプログラムを作るためには欠かせない機能だということもあわせて覚えておきましょう。
else文の基本構文
Rubyのelse文の書き方はシンプルです。if文やunless文の後に続けて使います。
基本の形は次のようになります。
unless文と組み合わせた場合は、条件が真のときにelseの処理が実行されます。if文とは逆の動作なので注意しましょう。
Rubyには「三項演算子」を使った簡潔な条件分岐もあり、else文の代わりとして一行で書くことができます。
if-elsif-elseという多分岐の構造文では、elseは常に最後に配置され、それまでのすべての条件が当てはまらない場合に実行されます。
Rubyでは、if-else文全体が式として扱われ、値を返すことができます。これにより、条件による値の代入を簡潔に書くことが可能です。
実用例
else文がどのように使われるのか、実際のコード例で見ていきましょう。
動物たちを例にして、さまざまな場面でのelse文の活用方法を紹介します。
どの例も実際に動かすことができるので、ぜひ手元で試してみてください。
基本的な二者択一の処理
まずは一番シンプルなelse文の使い方から始めましょう。
動物が肉食動物かどうかを判定して、それぞれに合ったメッセージを表示する例です。
どんな場合でも必ず何かのメッセージが表示されるように、すべてのケースを考慮しています。
実行結果:
ウサギは草食動物です
この例では、is_carnivore(肉食動物かどうか)がfalseなので、ifの条件に当てはまりません。そのため、elseの方の処理が実行されて「ウサギは草食動物です」が表示されます。
if-elseを使うことで、肉食動物でも草食動物でもどちらの場合でも、必ず適切なメッセージが表示されるようになります。
これがelseの大きなメリットです。
デフォルト値の設定
次は、else文を使ってデフォルト値を設定する例を見てみましょう。
動物の生息地を調べるプログラムを考えてみます。
もし、データベースにその動物の情報がない場合、「データなし」という代わりの値を表示したいですよね。こんなときはelseの出番です。
実行結果:
カピバラの生息地: 不明な生息地
この例をくわしく見てみましょう。
まず、habitatsという辞書にライオンとペンギンの生息地だけが登録されています。カピバラの情報はありません。
habitats.key?(animal) でカピバラがデータにあるかチェックすると、結果はfalseになります。そのためelseの処理が実行されて、「不明な生息地」という値がhabitatに入ります。
このようにelseを使うことで、データが存在しない場合でもエラーで止まることなく、プログラムが正常に動作し続けることができるのです。
else文とnilの処理
プログラミングでは、データが存在しない状況を表すためにnilという特別な値を使います。
このnilを安全に処理するのも、else文の重要な役割の一つです。
動物の情報を表示するプログラムを考えてみましょう。
もし、データがnil(何もない)だったら、エラーになってプログラムが止まってしまいます。しかし、elseを使えば安全に対処できます。
実行結果:
動物データが存在しません
Rubyでは、nilは「偽」として扱われます。つまり、ifの条件として使うと「当てはまらない」という判定になります。
そのため、animal_data がnilの場合、ifの条件が偽になり、elseの処理が実行されます。
こうすることで、データが存在しない場合でも適切なメッセージを表示して、プログラムが安全に動作し続けるのです。
もしelseがなかったら、animal_dataの部分でエラーが発生してプログラムが止まってしまいます。
elseは、こうした問題を防ぐ「安全装置」のような役割も果たしているのです。
三項演算子でのelse
if-else文を1行で書ける便利な方法があります。
これを「三項演算子」と呼びます。
動物が危険かどうかによって、違うメッセージを表示する例を見てみましょう。
短い条件分岐なら、この書き方でコードをすっきりさせることができます。
実行結果:
トラに注意してください
三項演算子の書き方は 条件 ? 当てはまる場合の値 : 当てはまらない場合の値 です。
この例では、is_dangerous が true なので、? 以降の「トラに注意してください」が選ばれて message に入ります。もし is_dangerous が false なら、: 以降の「トラは安全です」が選ばれます。
ちなみに、普通のif-elseで書くと次のようになります。
どちらも同じ結果になりますが、三項演算子の方がコンパクトですよね。
ただし、条件が複雑な場合は一般的なif-elseの方が読みやすいので、状況に応じて使い分けましょう。
else文と真偽値判定
Rubyには他のプログラミング言語とちょっと違う特徴があります。それは「何が真で何が偽か」の判定ルールです。
多くの言語では、0や空の配列、空の文字列なども「偽」として扱われますが、Ruby では違います。
Ruby で「偽」として扱われるのは、falseとnilだけです。
動物リストを使った例で、この特徴を確認してみましょう。
実行結果:
動物リスト: 空です
他の言語であれば空の配列[]は「偽」として扱われることが多いのですが、Rubyでは空の配列も「真」として扱われます。
そのため、ifの条件が当てはまり、配列が空かどうかを別途empty?メソッドでチェックしています。
Rubyでの判定ルールをまとめておきます。
- 偽として扱われる: falseとnilのみ
- 真として扱われる: それ以外すべて(0、空文字列、空配列なども含む)
この特徴を知っておくと、Rubyにおける条件分岐がより理解しやすくなるので、この機会にぜひ覚えておきましょう。
エラーハンドリングとelse
プログラムを書いていると、エラーが発生する可能性のある処理を扱うことがあります。
そういうとき、else文を使ってエラーが起きなかった場合の処理を書くことができます。
Rubyではbegin-rescue-elseという仕組みを使います。
この仕組みは「処理を試してみて、エラーが起きたら対処して、エラーが起きなかったら別の処理をする」という流れです。
実行結果:
指定されたキーが見つかりません
まず、fetch("classification") で存在しないキー「classification」を取得しようとします。このキーは辞書に存在しないので、KeyError というエラーが発生します。
エラーが発生すると、rescue の部分が実行されて「指定されたキーが見つかりません」というメッセージが表示されます。
else の部分は、エラーが発生しなかった場合にのみ実行されます。今回はエラーが発生したので、else の「データの取得に成功しました」は表示されません。
このようにelseを使うことで、正常に処理が完了した場合だけに実行したい処理を書くことができます。
エラー処理と正常処理を明確に分けられるので、プログラムが読みやすくなるという副次的なメリットもあります。
メソッド戻り値とelse
プログラムでは、処理をまとめた「メソッド」というものを作ることができます。
このメソッドが値を返すかどうかを条件にして、else文で代わりとなる処理を書くことができます。
動物を検索するメソッドを作って、見つからない場合の対応を考えてみましょう。
実行結果:
キリンの分類情報は登録されていません
find_animal というメソッドは、動物の名前を受け取り、その分類を返します。ただし、データにない動物の場合は nil を返します。
if result = find_animal(animal_name) の部分では、メソッドの結果を result に代入しながら、同時にその値を条件としてチェックしています。
キリンの情報はデータにないので、メソッドは nil を返します。
Rubyでは nil は「偽」として扱われるので、ifの条件が当てはまらず、else の処理が実行されるというわけです。
この方法を使うと、「データが見つかった場合は詳細を表示し、見つからなかった場合は適切なメッセージを表示する」といった処理を簡潔に書くことができます。
else文とcase文の併用
Rubyには、複数の条件をチェックする case 文という便利な機能があります。このcase文でもelseを使うことができます。
動物のサイズによって分類するプログラムを作ってみましょう。予想していない動物が来ても、適切に対応できるようにします。
実行結果:
カンガルーのサイズ分類が定義されていません
case文は、一つの値(ここでは animal)を複数の条件と順番に比較します。when の後に書いた値のどれかと一致すれば、その処理が実行されます。
この例では、カンガルーは「ゾウ、キリン」にも「イヌ、ネコ」にも当てはまりません。そんなときに活躍するのが else です。
どの when の条件にも当てはまらない場合、else の処理が実行されます。
まとめ
Rubyのelse文について、基本的な使い方から実践的な応用まで学んできました。
else文は「条件が当てはまらない場合の処理」を書くための仕組みでしたね。
また、予期しない状況に対応する「保険」としての役割も果たしていました。
この記事で学んだelse文の使い方を振り返ってみましょう。
- 二者択一の処理(if-elseによる選択)
- デフォルト値の設定(データが存在しない場合の対応)
- else文とnilの処理(nilの安全な処理・エラー防止のための仕組み)
- 三項演算子でのelse(1行で書けるif-else)
- else文と真偽値判定(「偽」として扱うのはfalseとnilのみ)
- エラーハンドリングとelse(例外処理との連携)
- メソッド戻り値とelse(フォールバック処理)
- else文とcase文の併用(複数条件でのデフォルト処理)
else文を使いこなして条件分岐を完成させることで、ユーザーの予期しない操作やデータの不備があっても、プログラムは安全に動作し続けるようになります。
初めてRubyを学ぶ方も、この記事で紹介した基本的なelse文の使い方を実際に試してみることで、条件分岐に対する理解が深まるでしょう。
条件分岐は、プログラミングの根幹をなす考え方です。
if文と組み合わせることで、あらゆる状況に対応できる条件分岐を作ることができるので、マスターするとプログラミングスキルは相当上がったといえます。
ぜひ、今回の記事のコード例を参考に手を動かして学んでみてください。