Rubyのif文とunless文を完全攻略!読みやすい条件分岐の書き方と基本
生徒
「Rubyで、もし雨が降ったら傘をさす、みたいな動きをプログラムにさせることはできますか?」
先生
「はい、Rubyでは if文 や unless文 を使うことで、条件に合わせて処理を分けることができますよ。」
生徒
「if文は何となく聞いたことがありますが、unless文というのは何ですか?」
先生
「unlessは、ifの反対で、もし何々でなければという意味になります。読みやすいコードを書くためにとても大切な要素なので、基本から順番に見ていきましょう!」
1. if文とは?条件分岐の基本を学ぼう
Rubyのプログラミングにおいて、最もよく使われる道具の一つがif文です。これは、特定の条件が満たされたときだけ、決まった命令を実行させるための仕組みです。現実の世界で例えるなら、もし冷蔵庫にプリンがあったら食べるという行動と同じです。プリンがあるという条件が正しいときにだけ、食べるという行動に移りますよね。このように、もしもといった状況をコンピュータに教えるのが条件分岐の役割です。
コンピュータの世界では、条件が正しいことを真(true/トゥルー)、正しくないことを偽(false/フォルス)と呼びます。if文の後に書いた条件が真であれば、その中身が実行されます。逆に偽であれば、何もせずに次の処理へと進みます。これをマスターするだけで、プログラムに知能を持たせたような複雑な動きを作ることができるようになります。
Rubyの文法を基礎からしっかり固めたい人や、 現場で役立つ「テスト駆動開発」の考え方まで身につけたい人には、 評価の高いこの一冊がおすすめです。
プロを目指す人のためのRuby入門をAmazonで見る※ Amazon広告リンク
2. if文の書き方と簡単なプログラム例
それでは、実際にRubyでどのように書くのかを見ていきましょう。if文は、ifで始まり、条件を書き、実行したい処理を書いた後に、必ずendで締めくくるというルールがあります。このendを忘れてしまうと、コンピュータはどこまでがif文の中身なのか分からなくなってしまい、エラーという間違いの通知を出してしまいます。
まずは、数字を比較する簡単な例を見てみましょう。例えば、持っているお金が1000円以上なら、高いアイスを買うというプログラムです。比較には記号を使いますが、これは算数で習った不等号と同じ意味です。
money = 1500
if money >= 1000
puts '高いアイスを買います!'
end
高いアイスを買います!
このコードでは、変数moneyに1500が入っています。1500は1000以上なので、条件は真となり、putsという命令によって画面に文字が表示されます。もしmoneyが500だったら、この文字は表示されません。このように、データの状態によって結果が変わるのがプログラミングの面白いところです。
3. unless文の役割と否定の条件
次に、Ruby特有の便利な命令であるunless文について解説します。unlessは、英語で何々でない限りという意味があります。プログラミングでは、もし条件が偽であれば実行するという動きをします。つまり、if文のちょうど反対の働きをするわけです。例えば、もし雨が降っていなければピクニックに行くといった、何々ではないときに何かをしたい場合に非常に役立ちます。
unless文を使う理由は、人間にとって読みやすいコードを書くためです。if文を使って何々でないという否定の条件を作ることもできますが、頭の中で二重否定のように考えなければならず、読み間違えの原因になります。unlessを使うことで、自然な言葉に近い形で条件を書くことができるようになります。ただし、unlessはif文よりも使いどころを選ぶ必要があります。
weather = '晴れ'
unless weather == '雨'
puts 'ピクニックに出かけましょう!'
end
ピクニックに出かけましょう!
この例では、天気が雨ではないときにだけメッセージが表示されます。直感的で分かりやすいですね。Rubyを始めたばかりの人は、まずはif文を完璧に覚え、その後にunless文を添える感覚で学習を進めるのがスムーズです。
4. 読みやすいコードにするための後置ifと後置unless
Rubyには、コードをたった一行でスッキリと書くための後置(こうち)という書き方があります。これは、実行したい命令の後にifやunlessを書くスタイルです。通常は3行ほど必要になる処理が、たった1行に収まるため、非常にスマートに見えます。特に、短いメッセージを出したり、簡単なチェックを行ったりする際に好んで使われます。
ただし、あまりに長い条件を後ろに書くと、何を実行しようとしているのかが分かりにくくなってしまいます。読みやすさ、つまり可読性(かどくせい)を常に意識することが大切です。可読性が高いコードは、自分以外の人が見たときや、数ヶ月後の自分が読み返したときに、すぐに意味が理解できる良いコードのことです。
score = 90
puts '合格です!' if score >= 80
合格です!
この書き方をすると、もしスコアが80以上なら合格ですと表示せよという自然な文章のように読めますね。複雑な計算が必要ない場合は、積極的に使ってみるとコードが綺麗になります。
5. unless文でelseを使わないのが鉄則!アンチパターンを避ける
プログラミングには、やってはいけない書き方、いわゆるアンチパターンが存在します。unless文において最大のアンチパターンは、elseを一緒に使うことです。これは初心者の方が最も陥りやすい罠です。unlessの中でelseを使うと、もし何々でなければAを行い、そうでない場合(つまり何々である場合)はBを行うという、非常に複雑な思考を強いるコードになってしまいます。
人間は否定の否定を瞬時に理解するのが苦手です。もしelseを使いたい状況になったら、迷わずunlessを普通のif文に書き換えましょう。Rubyの設計者も、unless文でelseを使うことは推奨していません。シンプルに保つことが、バグというプログラムの間違いを防ぐための最も強力な武器になります。
# 悪い例(アンチパターン)
unless user_active
puts '停止中です'
else
puts '活動中です' # 結局どちらが実行されるか混乱する
end
# 良い例(if文で書き直す)
if user_active
puts '活動中です'
else
puts '停止中です'
end
このように書き換えるだけで、一気に意味が通りやすくなります。コードは書く時間よりも読まれる時間の方が圧倒的に長いため、常に読み手への優しさを忘れないようにしましょう。
6. 複雑な条件をスッキリ見せるテクニック
プログラムを作っていると、条件が一つだけではなく、AかつBであるときや、CまたはDであるときのように、複数の条件を組み合わせたくなることがあります。しかし、これらを一つのif文に詰め込みすぎると、コードが横に長く伸びてしまい、非常に読みにくくなります。このような場合は、条件を一度別の名前(変数)に保存する、といった工夫が必要です。
また、if文の中にさらにif文を書くネスト(入れ子)という状態も、可読性を下げる要因になります。できるだけネストを浅く保ち、早めに処理を終わらせる書き方を意識すると、驚くほどスッキリとしたプログラムになります。Rubyの自由度の高さを活かして、美しく整頓されたコードを目指しましょう。
7. 真偽値以外の評価!Rubyのif文の秘密
最後に、Rubyの少し特殊な性質についてお話しします。Rubyでは、trueやfalseそのものだけでなく、あらゆるデータが真か偽として判定されます。具体的には、falseとnil(ニル)というデータ以外は、すべて真として扱われます。nilとは、何もない、空っぽであることを表す特別な言葉です。例えば、数字の0や空の文字も、Rubyのif文では真として扱われることに注意してください。
この性質を理解しておくと、データが存在するかどうかをチェックするコードがとても短く書けるようになります。パソコンを触ったことがない人には少し驚きかもしれませんが、Rubyはとても柔軟な言語なのです。基本のif文とunless文を適切に使い分け、読みやすいプログラムを書く喜びを感じてみてください。