百名山 API を開発しました | mountix APICLICK !

Rust | インクリメント [++]・デクリメント [–] の書き方

Rust increment++ decrement--
  • URLをコピーしました!

Rust では、インクリメントやデクリメントをindex++;index--;という書き方で表現できません。

Rustでの、インクリメント・デクリメントの記法

  1. インクリメント:index = index + 1;もしくはindex += 1;
  2. デクリメント:index = index - 1;もしくはindex -= 1;
目次

インクリメント・デクリメント

Rust には、index++;というようなインクリメント演算子やindex--;というようなデクリメント演算子が存在しません。

そのため、代入演算子を使ってインクリメントとデクリメントを表現します。

インクリメント

fn main() {
    let mut count = 0;
    for _i in 0..10 {
        // var += expr: 足し算後に代入
        count += 1;
        println!("{count}");
    }
}

もちろん、以下のように素直に実装することもできます。

fn main() {
    let mut count = 0;
    for _i in 0..10 {
        count = count + 1;
        println!("{count}");
    }
}

デクリメント

fn main() {
    let mut count = 0;
    for _i in 0..10 {
        // var -= expr: 引き算後に代入
        count -= 1;
        println!("{count}");
    }
}

もちろん、以下のように素直に実装することもできます。

fn main() {
    let mut count = 0;
    for _i in 0..10 {
        count = count - 1;
        println!("{count}");
    }
}

なぜ、インクリメント演算子やデグリメント演算子がないのか。

なぜ Rust にはインクリメント演算子とデクリメント演算子がないのか?という疑問は、少なからずあるようです。

Why doesn’t Rust have increment and decrement operators?

Preincrement and postincrement (and the decrement equivalents), while convenient, are also fairly complex. They require knowledge of evaluation order, and often lead to subtle bugs and undefined behavior in C and C++. x = x + 1 or x += 1 is only slightly longer, but unambiguous.

https://github.com/dtolnay/rust-faq#why-doesnt-rust-have-increment-and-decrement-operators

なぜ Rust にはインクリメント演算子とデクリメント演算子がないのですか?

プリインクリメントとポストインクリメント(およびそれに相当するデクリメント)は便利な反面、かなり複雑です。x = x + 1 や x += 1 は、ほんの少し長いだけですが、曖昧さがありません。

[ DeepLで翻訳 ]

まとめ

無意識のうちにindex++;と書いてしまい、cargoさんに怒られることがあります笑

今後は気をつけたいと思います:)

参考

著:初田直也, 著:山口聖弘, 著:吉川哲史, 著:豊田優貴, 著:松本健太郎, 著:原将己, 著:中村謙弘, 著:フォルシア株式会社
¥1,782 (2022/10/05 16:03時点 | Amazon調べ)
Rust increment++ decrement--

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

  • URLをコピーしました!

コメント

コメントする

目次