Rubyの三項演算子を活用しよう!5つの手順と例でわかりやすく説明

Rubyの三項演算子を活用しよう!5つの手順と例でわかりやすく説明

Ruby三項演算子の説明とサンプルコードRuby
この記事は約8分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミング言語Rubyを学んでいる皆さん、こんにちは。

この記事では、Rubyの強力なツールの一つ、三項演算子の使い方を解説していきます。

三項演算子は少々独特な書き方をするのですが、その一見すると難しそうなこの演算子が実はとても便利な機能を持っていることを紹介します。

この記事を通じて三項演算子の使い方を理解し、日々のコーディングがより効率的になることを目指しています。

●Rubyとは

Rubyは、より人間に近い表現でコードを書けるという特徴を持つプログラミング言語です。

そのため、コードが読みやすく、プログラミング初心者でも取り組みやすいとされています。

○Rubyの基本

Rubyでコードを書く上で知っておきたい基本的なことは、変数の定義、メソッドの作り方、制御構造(if文やloop文など)の使い方などです。

これらの基礎を理解することで、Rubyの持つ豊かな表現力を十分に活用できるようになります。

●三項演算子とは

三項演算子は、その名の通り3つの項を持つ演算子で、”条件式 ? 真の時の処理 : 偽の時の処理”という形で書きます。

これにより、if文を一行で書くことが可能となります。

○三項演算子の基本形

Rubyの三項演算子は次のように表現します。

条件式 ? 真の時の処理 : 偽の時の処理

このコードは、「条件式」が真(true)の場合は「真の時の処理」が実行され、偽(false)の場合は「偽の時の処理」が実行されます。

○三項演算子の用途

三項演算子は、主に短い条件分岐を行う場合に使用します。

if文と比べてコードが短くなり、見やすさや可読性が向上するため、条件式がシンプルで、それぞれの処理が短い場合に適しています。

●三項演算子の使い方

それでは具体的な三項演算子の使い方について見ていきましょう。

次のサンプルコードを通じて、三項演算子の活用方法を学びます。

○サンプルコード1:簡単な条件分岐

まずは、三項演算子を使った基本的な条件分岐の例から始めましょう。

x = 10
message = x > 5 ? "xは5より大きいです" : "xは5以下です"
puts message

このコードでは、x > 5 ? "xは5より大きいです" : "xは5以下です"が三項演算子を使っています。

x > 5という条件式が真であれば(つまり、xが5より大きい場合)、”xは5より大きいです”という文字列が返され、偽であれば(xが5以下の場合)、”xは5以下です”という文字列が返されます。

この結果をmessageに代入し、puts messageでその結果を出力します。

このコードを実行すると、xが10なので、”xは5より大きいです”と表示されます。

○サンプルコード2:値の代入

次に、三項演算子を使った値の代入の例を見ていきましょう。

x = 10
y = x > 5 ? x * 2 : x / 2
puts y

ここではy = x > 5 ? x * 2 : x / 2が三項演算子を使っています。x > 5という条件式が真であれば、x * 2(xの2倍)がyに代入され、偽であれば、x / 2(xを2で割った値)がyに代入されます。

その結果を出力しています。

このコードを実行すると、xが10なので、yには10の2倍である20が代入され、その値が出力されます。

○サンプルコード3:メソッド内での利用

最後に、メソッド内で三項演算子を使う例を見てみましょう。

def check_number(x)
  x > 5 ? "大きい" : "小さい"
end

puts check_number(10)
puts check_number(5)

このコードでは、x > 5 ? "大きい" : "小さい"という三項演算子がメソッドcheck_number内に記述されています。

このメソッドは引数xが5より大きければ”大きい”、そうでなければ”小さい”という文字列を返します。

このメソッドを使って、数値10と5をチェックしています。

このコードを実行すると、まず10を引数にしたcheck_number(10)が”大きい”を返し、次に5を引数にしたcheck_number(5)が”小さい”を返します。

●三項演算子の応用例

それでは、更に応用的な例を見てみましょう。

ここでは、配列やハッシュを扱うコードの中で三項演算子を使う方法を紹介します。

○サンプルコード4:配列の要素の操作

まずは、配列の要素に対して三項演算子を用いた操作を見てみましょう。

numbers = [2, 7, 10, 5]
adjusted_numbers = numbers.map { |num| num.even? ? num * 2 : num * 3 }
p adjusted_numbers

このコードでは、配列numbersの各要素に対して、その数値が偶数であれば2倍、奇数であれば3倍にして新しい配列adjusted_numbersを作っています。

numbers.map { |num| num.even? ? num * 2 : num * 3 }が三項演算子を活用しています。

.mapメソッドは、元の配列の各要素に対してブロック内の処理を行い、その結果を新しい配列として返します。

このコードを実行すると、adjusted_numbers[4, 21, 20, 15]という配列になります。

○サンプルコード5:ハッシュの要素の操作

続いて、ハッシュの要素に対して三項演算子を使って操作を行う例を見てみましょう。

grades = { "田中" => 80, "鈴木" => 92, "佐藤" => 78 }
adjusted_grades = grades.transform_values { |grade| grade >= 80 ? "優" : "良" }
p adjusted_grades

このコードでは、ハッシュgradesの各要素(値)に対して、その値が80以上なら”優”、そうでなければ”良”と変換して新しいハッシュadjusted_gradesを作っています。

grades.transform_values { |grade| grade >= 80 ? "優" : "良" }が三項演算子を活用しています。

.transform_valuesメソッドは、ハッシュの各値に対してブロック内の処理を行い、その結果を新しいハッシュとして返します。

このコードを実行すると、adjusted_grades{ "田中" => "優", "鈴木" => "優", "佐藤" => "良" }というハッシュになります。

●注意点と対処法

三項演算子は非常に便利な構文ですが、その一方で誤用によるバグを生む可能性もあります。

ここでは、そのような誤用の一例と対処法を解説します。

○三項演算子の誤用と対処法

三項演算子を使う際に最も注意すべき点は、その構文が持つ優先順位です。

他の演算子と組み合わせて使う場合、予期せぬ結果を生む可能性があります。

例えば次のようなコードを考えてみましょう。

x = 10
y = 3
puts x / y > 2 ? "大" : "小"

このコードでは、x / y > 2 ? "大" : "小"という式を実行しようとしています。

一見すると、「xyで割った結果が2より大きければ”大”を出力し、そうでなければ”小”を出力する」と解釈できそうです。

しかし、このコードを実行すると”大”と出力されます。それはなぜでしょうか?

それは三項演算子の優先順位が比較演算子よりも高いため、このコードは`x / (y > 2) ? “大” : “小”`と解釈されてしまうからです。

そのため、期待した結果が得られません。

この問題を解決するためには、計算式を明示的に括弧で囲むことで解釈の優先順位を明確にすると良いです。

つまり、上記のコードは次のように修正すべきです。

x = 10
y = 3
puts (x / y) > 2 ? "大" : "小"

こうすることで、xyで割った結果を先に求め、その結果が2より大きいか小さいかを判定するという、意図した処理を正しく行うことができます。

この修正後のコードを実行すると、正しく”小”と出力されます。

このように、三項演算子を使用する際は、他の演算子との組み合わせに注意し、必要に応じて括弧を使って明示的に計算の優先順位を指定することが重要です。

●三項演算子のカスタマイズ方法

三項演算子はその性質上、様々なシチュエーションでカスタマイズすることができます。

特にエラーハンドリングの処理においてその効果を発揮します。

○三項演算子を活用したエラー処理のカスタマイズ

三項演算子を使ってエラー処理をカスタマイズした例を紹介します。

def divide(x, y)
  y != 0 ? x / y : "エラー:0で割り算はできません"
end

puts divide(10, 5)
puts divide(10, 0)

このコードでは、divideという名前のメソッドを定義しています。

このメソッドでは、二つの引数xyを受け取り、yが0でない場合はx / yを計算してその結果を返し、yが0の場合はエラーメッセージを返すという処理を行っています。

このコードを実行すると、まず10と5を引数にしたdivide(10, 5)が2を返し、次に10と0を引数にしたdivide(10, 0)が”エラー:0で割り算はできません”を返します。

まとめ

以上、この記事ではRubyの三項演算子の使い方とその応用法について解説しました。

また、三項演算子を使う際の注意点や対処法、カスタマイズの方法も詳しく解説しました。

三項演算子は簡潔な条件分岐を行うための強力なツールですが、それゆえに誤用によるバグを生む可能性もあるため、その使用には注意が必要です。

この記事がRubyの三項演算子を上手に活用するための参考になれば幸いです。