日本の山岳一覧・百名山 API を開発しましたCLICK !

Rust | 三項演算子は if で表現する

?: operator in Rust
  • URLをコピーしました!

Rust でJavaScript みたいな三項演算子の記法があるか調べてみました。

Rust の三項演算子は if で表現する

  1. Rust には?:で表現する三項演算子は存在しない
  2. if文を三項演算子のように使用する
  3. matchでそれっぽいことができる?
目次

Rust の三項演算子は if で表現する

偶数と奇数を判定するようなプログラムを書いてみます。

JavaScript の三項演算子

?:を使った三項演算子で書くことができます。

条件 ? 条件が真値のとき評価される式 : 条件が偽値のときに評価される式です。

for (i = 1; i <= 10; i++) {
    let result = i % 3 == 0 ? "even number" : "odd number";
    console.log(`${i}: ${result}`);
}

[...Array(10)].forEach((_, i) => {
    let num = i + 1;
	let result = num % 2 == 0 ? "even number" : "odd number";
    console.log(`${num}: ${result}`);
});

Rust は if で表現する

Rust ではif文を三項演算子のように使用することができます。

fn main() {
    for num in 1..=10 {
        // 三項式
        let result = if num % 2 == 0 { "even number" } else { "odd number" };
        println!("{}: {}", num, result);
    }
}

match でも表現できる

matchも値を返すことができるため、以下のような書き方もできます。

_ というパターンは、どんな値にもマッチします。
最後に記述することで、_はそれまでに指定されていない全ての可能性にマッチすることを意味します。

また、単一の式で値を返す場合、中括弧は省略可能です。

fn main() {
    for num in 1..=10 {
        let result = match num % 2 {
            0 => "even number",
            _ => "odd number",
        };
        println!("{}: {}", num, result);
    }
}

1 つのケースにしか興味がないような場面では、match 式はちょっと長ったらしい気もします。

このような場面では if が望ましいのではないでしょうか!

まとめ

「三項演算子はありません。if でやってね。」ということのようです!!!!

Rust っぽいと言えば、Rust っぽい仕様ですね。

Go も三項演算子の記法はないみたいだし、可読性が落ちるというのが意見としては強いのかもしれません。

Go に三項演算子がない理由はFAQで回答があるようです。

参考

著:初田直也, 著:山口聖弘, 著:吉川哲史, 著:豊田優貴, 著:松本健太郎, 著:原将己, 著:中村謙弘, 著:フォルシア株式会社
¥3,208 (2024/11/30 11:10時点 | Amazon調べ)
著:Jim Blandy, 著:Jason Orendorff, 著:Leonora F. S. Tindall, 翻訳:中田 秀基
¥5,280 (2024/12/05 05:59時点 | Amazon調べ)
?: operator in Rust

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!

コメント

コメントする

目次