【Ruby】unless文の書き方と使い方の基本
開発環境
- Ruby version: ruby 3.1.2
Rubyのunless文とは
Rubyのunless文とは、コンピュータプログラムで命令が実行される流れを定めた制御構造のうち、条件式の真偽によって処理を分岐させる条件分岐の構文です。 公式リファレンス:https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#unless
Rubyのunless文の書き方
Rubyのunless文の書き方を「unless文の基本形」「unless文の省略形」「unless修飾子」をご紹介します。
Rubyのunless文の基本形
Rubyのunless文の基本形は下記のように記述します。
1unless 条件式 then 2 条件式がfalseの場合に行う処理 3else 4 条件式に当てはまらない場合に行う処理 5end
unless文はif文と反対で、if文では条件式が「真」の場合にthen以下の処理を実行しますが、unless文では条件式が「偽」の場合にthen以下の処理を実行します。 補足ですが、unless文ではelsifを指定することはできないことや、elseがなくいずれの条件も成り立たなければnilを返してくれるということも覚えておきましょう。
Rubyのunless文の省略形
Rubyのunless文はthenを省略することができます。
1unless 条件式 2 条件式がfalseの場合に行う処理 3else 4 条件式に当てはまらない場合に行う処理 5end
実際の開発ではthenを省略して書くことがほとんどなので、省略形で覚えるのがおすすめです。
Rubyのunless修飾子
Rubyのunless文は1行で書くことも可能です。
1処理 unless 条件式
右辺の条件式が成立しない時に左辺の処理を実行し、条件式が成立しなければnilを返します。 unless装飾子は実行する処理を先に記述しているだけですが、unless装飾子の記述方法は下記の処理内容と同様です。
1unless 条件式 then 2 条件式がfalseの場合に行う処理 3end
分かりやすいコーディングを意識した場合、先に記述することで何を実行しようとしているのかが分かり易くなる場合があるため、たまに使用することがあります。
Rubyのunless文の使い方
Rubyのunless文のよくあるパターンをサンプルコードを用いて使い方の解説をしていきます。
unless文の単一条件パターン
1number = rand(10) 2 3unless number.even? 4 puts "偶数ではありません。" 5end
even?は偶数の場合にtrueを返してくれますが、unlessはfalseの場合に実行されるため、偶数ではない場合に処理を実行するとなります。 上記をif文で書き換えると下記になります。
1number = rand(10) 2 3if number.odd? 4 puts "偶数ではありません。" 5end
odd?は奇数の場合にtrueを返してくれるため、奇数である場合に処理を実行するとなります。 また、演算子式のnotを使用して書き換えると下記になります。
1number = rand(10) 2 3if !number.even? 4 puts "偶数ではありません。" 5end
「!」を条件式の前につけることにより、条件式がtrueである時にfalse、条件式がfalseである時にtrueを返します。 だたし、否定演算子を使うのであれば、unless文のほうが直感的に見やすいコードになります。
unless文の複数条件パターン
1number = rand(10) 2 3unless number.even? && number < 5 4 puts "5未満の偶数ではありません。" 5end
演算子式の「&&」は「and」という意味のため、条件式がどちらも「true」の場合に「true」を返してくれるため、偶数かつ5未満ではない場合に実行されます。 上記をif文で書き換えると下記になります。
1number = rand(10) 2 3if number.odd? && number >= 5 4 puts "5未満の偶数ではありません。" 5end
上記は奇数かつ5以上の場合に実行されます。 ただし、unless文は直感的に書くことで可読性を向上させることが多いため、演算子式のandという意味の「&&」や、orという意味の「||」などを組み合わせた複数条件は使わないほうが良いです。
おわりに
Rubyのunless文の使い方を解説してきました。 Rubyの条件分岐はif文を使用することが多いかと思いますが、unless文と使い分けることでより見やすく可読性を向上させることができます。 また、Ruby on Railsの機能である真偽判定「nil?/empty?/blank?/present?」と組み合わせて直感的なプログラムを書くことができますので、是非、参考にしてください。