1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】unlessは簡単な構文の時に使おう

Last updated at Posted at 2024-10-06

はじめに

本日はunlessの使い方について記事にしていこうと思います。
余談ですが、10月中にやっとGitやLinuxなどの勉強がひと段落しました(まだ基礎レベル)。今月からRubyの勉強を始めましたので、Rubyに関する記事が増えるかもしれません。では、さっそく本題に入りましょう。

unlessとは

unlessは、ifの逆の条件を扱う構文です。具体的には「条件が偽のときに実行する」ために使われます。
ifは条件が真の場合に実行されるのに対し、unlessは条件が偽の場合に実行されます。
unlessは読みやすさやコードの意図を明確にするために便利で、特にシンプルな否定条件に対して効果的です。
基本構文は以下の通りです真。

unless1.rb
unless 条件式
  # 条件が 偽 の場合に実行されるコード
end

もちろんif文と!を用いて同様に表すことができます。

if1.rb
if !条件式
  # 条件が 偽 の場合に実行されるコード
end

unlessを使う場面

unlessを使うメリットとしては可読性が高くなることです
シンプルな否定の条件がある場合、if !条件 よりも、unlessのほうが意図が明確に伝わることがあります。
短く読みやすいコードにしたいとき。unlessはネストの深いコードや複雑な条件文を避けるのに役立つことがあります。

unless2.rb
# unlessを使った場合
unless user_logged_in
  puts "ログインしてください"
end

# ifで否定を使った場合
if !user_logged_in
  puts "ログインしてください"
end

unlessを使わない場面

unlessを使わない場面はいくつかありますが代表的なものを紹介していきます

  • 複数の条件を組み合わせる場合
  • elseを使う場合

複数の条件を組み合わせる場合

以下の例を見てみましょう。

unless3.rb
# 悪い例
unless user_logged_in || admin_rights
  puts "ログインしてください"
end

# 良い例
if !user_logged_in && !admin_rights
  puts "ログインしてください"
end

高校数学1Aのド・モルガンの定理と同じでuser_logged_inをA
admin_rightsをBと置くと以下の関係が成り立っています

\overline{A\cup B}=\overline{A}\cap \overline{B}

AまたはBの否定を表すのは大変なので、Aの否定かつBの否定を考えようといった場面でunlessを使用するとややこしくなるということです。

elseを使う場合

unlessとelseを組み合わせると、論理が混乱しやすいです。unless自体が「~でないなら」を意味するので、そこにelseを加えると直感的に分かりにくくなります。

unless4.rb
# 悪い例
unless has_permission
  puts "アクセス拒否"
else
  puts "アクセス許可"
end

# いい例
if has_permission
  puts "アクセス許可"
else
  puts "アクセス拒否"
end

この構文は、「もし権限がないならアクセス拒否し、そうでなければアクセス許可する」という意味ですが、unlessとelseを組み合わせると理解しづらくなります。

まとめ

今回は、unlessの使い方とその使用に適した場面、適さない場面について説明しました。
unlessは単純な否定の条件に適しており、複雑な条件やelseを伴う場合には、ifを使った方が可読性が向上します。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?