タプルを用いた値の交換

2つの値を交換したい時、皆さんはどのようにしていますか?

私は本日、以下のように愚直に行っていました。

var x = 1;
var y = 2;
var tmp = x;
x = y;
y = tmp;

スマートでないな~と思っていたのですが、
コードレビューにて同様の処理をタプルを用いて以下のように記述できるとの指摘を受けました。

var x = 1;
var y = 2;
(x, y) = (y, x);

う~ん、これはスマート!
(シンプルで可読性が高くて良いですね!)

タプルの構築と分解代入の複合により実現されるようです。
少し調べてみたところ、
コンパイル時には以下のような具合に最適化されるようです。

var tmp1 = y;
var tmp2 = x;
x = tmp1;
y = tmp2;

コンパイラも賢いですね!

今後もこのような知見を活かしてコードをシンプルに保てるようにしたい所存です。

(参考)
以下のサイトを参考に一部コードを引用させていただきました。
ありがとうございました。

複合型の分解 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C

コメントを残す