複数の変数に同じ値を代入する

C
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

背景

複数の値に同時に代入したいことがたまにある。

その行為が妥当かどうなのかは置いておいて

普通に

a = 0;
b = 0;

とすればよいのだけれど、
どうせならもっとスマートな書き方を知っておこうということで調べてみた結果をまとめました。

私が書ける言語だけまとめました(偏り)

結論

a = b = 0;

どの言語もだいたい上記のような書き方で宣言できる。

「代入」はそもそも「式」なので、一文で記入した場合、右から評価される。
それゆえ、このような書き方ですべての変数に代入することが可能となる。


言語ごとの違い

C / C++ / C# / Objective-C

int a,b;
a = b = 0;
int a = 0, b = 0;

※ 以下のようにすると、bにのみ0が代入される

int a, b = 0;

JavaScript

var a = b = 0;
# ※ 上記の場合、aは**ローカル変数**、bは**グローバル変数**となる

# アンパック代入
var a, b;
[a, b] = [0, 0];
[a, b] = [1, 2];    # ※

※アンパック代入では一括で違う値も代入可能

JavaScriptでもアンパック代入できた!びっくり!

PHP

$a = $b = 0;

Python

# マルチターゲット代入
a = b = 0;

# アンパック代入
a, b = 0, 0;
a, b = 1, 2;    # ※

※アンパック代入では一括で違う値も代入可能

VBA

無理

Swift

[2017/12/06 追記]

同時に同じ値の代入はできないが、
タプルを利用して、Pythonでいうアンパック代入のようなことはできる

※タプルとは
http://wp-p.info/tpl_rep.php?cat=swift-biginner&fl=r22
この辺をご参考に…(私もいまいちわかっていないので丸投げ)

※Swift1から使用可能…なはず。

let (a, b) = (1, 2)

他にもわかったら追記します

コメント