LoginSignup
0
0

More than 5 years have passed since last update.

演算子オーバーロードのインクリメントの挙動

Posted at

前回Rubyで投稿して、思ったよりViewが多かったので、びっくりしました(100Viewいかないと思ってました)
なので、投稿第2弾を投稿してみようと思います。
※前回の投稿はもしよければこちらを!
RailsのPrivateメソッドはJavaと同じ感覚でいると痛い目に合う!

今回はkotlinについてです!
kotlinには大雑把に言うと、2種類のインクリメントの記載方法があります
a++ と ++a です
しかも使った結果、値に差が出ると知ったときは何だこの言語と思いました(笑)
今回はそんなインクリメントの挙動の違いを備忘録として残したいと思います。

挙動の違い

そもそもなぜ気づいたかというと下記のコードのおかげなんです

var testNumber = 10
// incrementNumberは10
var incrementNumber = testNumber++

++でインクリメントして、incrementNumber が11になっていると想定したので、あれおかしいなと思ったのがきっかけでした。

挙動の確認

リファレンスを確認してみると接頭のインクリメントと接尾のインクリメントに違いがあることが載ってました

The effect of computing the expression is:
Store the initial value of a to a temporary storage a0;
Assign the result of a.inc() to a;
Return a0 as a result of the expression.

For the prefix forms ++a and --a resolution works the same way, and the effect is:
Assign the result of a.inc() to a;
Return the new value of a as a result of the expression.

つまり要約すると、a++の場合はa0領域に増やす前の値を格納し、値を増やすが、返す値は増やす前のa0に格納された値を返している。
++aは増やした後の値を返しています。
なので、今回記載してる事象が起こったのです。

終わりに

インクリメントが2種類あって驚きでしたが、a++って使いどころあるのかとふと思いました。
ただ、while文とかfor文でa++を使うと思うんですが値は1増えているので、そこら辺の挙動も含めてさらに確認しようと思います。
あと、何か間違っていると自分で気づいたら修正しますが、指摘していただけるとありがたいです。

参照

Kotlinリファレンス(Operator overloading)

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0