いろんな言語を触っていると、言語の細かい仕様がだんだんごっちゃになってきてしまいますので、メモです。
インクリメント・デクリメントの有無
あり: Java、C言語、C++、Go言語△、PHP、Perl、JavaScript
なし: Scala、Rust、Python、Ruby
Go言語は式を構成する演算子ではなく文(statement)という扱いにすることで、インクリメントの演算子としての問題を回避していて、個人的にはちょうどいい仕様に感じます。
ついでに代入演算子も確認しましたが、こちらはだいたいの言語にあるようです。
Scala
- インクリメント・デクリメント演算子はない
- 代入演算子はある
i += 1
i -= 1
i += 1
などは i = i + 1
などのシンタックスシュガー。
参考
Assignment Operators - Expressions | Scala 2.13
Scalaでは、なぜインクリメントやデクリメントができないのか?
Java
- インクリメント・デクリメント演算子は前置・後置ともにある
- 式であり値を返す
- 代入演算子もある
++i;
--i;
i++;
i--;
i += 1;
i -= 1;
参考
Prefix Increment Operator ++ - Java Language Specification
Rust
- インクリメント・デクリメント演算子はない
- 代入演算子はある
i += 1;
i -= 1;
参考
Compound assignment expressions - Operator expressions - The Rust Reference
なぜインクリメント演算子がないのか?
Why doesn't Rust have increment and decrement operators?
C言語、C++
- インクリメント・デクリメント演算子は前置・後置ともにある
- 式であり値を返す
- 代入演算子もある
++i;
--i;
i++;
i--;
i += 1;
i -= 1;
Go言語
- C言語でいうインクリメント・デクリメント演算子は後置のみ
- 式ではなく文の扱いなので、式の中には埋め込めない
- 代入演算子もある
i++
i--
i += 1
i -= 1
参考
IncDec statements - The Go Programming Language Specification
++
や--
が演算子ではない件
演算子とステートメント — プログラミング言語 Go | text.Baldanders.info
PHP
- インクリメント・デクリメント演算子は前置・後置ともにある
- 式であり値を返す
- 代入演算子もある
++$i;
--$i;
$i++;
$i--;
$i += 1;
$i -= 1;
参考
Perl
- インクリメント・デクリメント演算子は前置・後置ともにある
- 式であり値を返す
- 代入演算子もある
++$i;
--$i;
$i++;
$i--;
$i += 1;
$i -= 1;
参考
インクリメントとデクリメント - perlop - Perl の演算子と優先順位 - perldoc.jp
Python
- インクリメント・デクリメント演算子はない
- 代入演算子はある
i += 1
i -= 1
累算代入文というらしい。
参考
累算代入文 (augmented assignment statement) - 単純文 (simple statement) — Python 3.8.0 ドキュメント
Ruby
- インクリメント・デクリメント演算子はない
- 代入演算子はある
i += 1
i -= 1
自己代入というらしい。
参考
Ruby にインクリメント演算子のようなものが無い理由 - fugafuga.write
Rubyのインクリメント速度のバージョンごとの比較 - Qiita
JavaScript
- インクリメント・デクリメント演算子は前置・後置ともにある
- 式であり値を返す
- 代入演算子もある
++i;
--i;
i++;
i--;
i += 1;
i -= 1;
参考
Update Expressions - ECMAScript® 2019 Language Specification