yasuoza diary

web and life

変数のスワップ

大学時代にC言語でプログラミングしているとき、変数のスワップをする必要が出た場合は一時変数用いるように教わりました。

こんなかんじでした。

1
2
3
 int tmp = x;
 int x = y;
 int y = tmp;

それから数年。今では主に動的言語を使ってプログラミングをしています。 ごく稀に変数のスワップを迫られる場面があり、これまでは上記のようなイケてない(※個人の感想です)方法でスワップしていました。

いろいろ調べたらRubyでは次のようにスワップ出来るようです。

1
2
3
4
5
a = 'I am a'
b = 'I am b'
a, b = b, a
puts a #=> 'I am b'
puts b #=> 'I am a'

Perlではこんなかんじ

1
2
3
4
5
my $a = 'I am a';
my $b = 'I am b';
($a, $b) = ($b, $a);
say $a; #=> 'I am b'
say $b; #=> 'I am a'

JavaScriptはIEでのバグが怖いので素直に一時変数使ってスワップするといいと思います。 Javascript swap array elements - stackoverflow

スワップに迫られる場面殆ど無いですが、あるとしたらイケてる方(※個人の感想です)を使いたいものです。

Perlの方はリストコンテキストをうまく使っているので、パッと見で何をしているのかわかりやすいですが、Rubyの方はちょっとわかりづらい気がします。 どちらもコメントなどでスワップするよ!っていう旨を記載しておくとリーダブルコードになるんじゃないかなと思います。