Rust では、インクリメントやデクリメントをindex++;
やindex--;
という書き方で表現できません。
Rustでの、インクリメント・デクリメントの記法
- インクリメント:
index = index + 1;
もしくはindex += 1;
- デクリメント:
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++.
https://github.com/dtolnay/rust-faq#why-doesnt-rust-have-increment-and-decrement-operatorsx = x + 1
orx += 1
is only slightly longer, but unambiguous.
なぜ Rust にはインクリメント演算子とデクリメント演算子がないのですか?
プリインクリメントとポストインクリメント(およびそれに相当するデクリメント)は便利な反面、かなり複雑です。x = x + 1 や x += 1 は、ほんの少し長いだけですが、曖昧さがありません。
[ DeepLで翻訳 ]
まとめ
無意識のうちにindex++;
と書いてしまい、cargoさんに怒られることがあります笑
今後は気をつけたいと思います:)
コメント