Swiftのおもしろ仕様と、Scalaの特殊な(?)構文

以下の、Appleが最近発表したSwiftという言語の、面白い(?)仕様が話題になってますが、




大事なことは全部MLが教えてくれた 〜 Apple の Swift の mutability 周りの件を理解する



これ見て、なんとなくScalaの "とある構文" を思い出したので書いてみる。


自分の理解では、要するに



「b.append(5)というのが、単なるメソッド呼び出しとかではなく、コピーして、追加して、かつ元の変数b自身の参照を書き換える(再代入する)」



という挙動をするあたりが、(他の言語でこんな動きするのがないので)、みんなが驚いているところですよね?
(Swiftの言語仕様上で、どういう定義のされ方をしてるのかは知らないが、とりあえず自分はそのように解釈した、という話)



それで、この
「普通のメソッド呼び出しに見えて、それは実は特殊な構文みたいなもので、代入以外の方法で変数に再代入のようなことが可能」
って、他にもありますよね?そう、Scalaで。


あとは、もう3年以上も前に書いたこれを読んでもらえばいいわけですが

scalaでは、なぜインクリメントやデクリメントができないのか?


要約すると、Scalaでは、「i += 1」は、実は「i = i + 1」のシンタックスシュガーです。インクリメントに限らず、イコールで終わるようにすれば、任意のものに適用できます。



Scalaの言語仕様を今更批判するつもりもないし、個人的にはSwiftもどうでもいいんですが
Scalaのこの仕様を知らない人が初めて知ったら、どう思うのだろうなぁ」
というのが気になりました。
「Swiftのあの仕様と、Scalaのこの仕様、どっちが気持ち悪く感じるのかなぁ」
とか。

ちなみにScalaのこの仕様、少しは使われてますが、それほど多く使われてるわけでもなく、個人的には、最悪なくなっても困らない気はします。逆に「積極的になくすべきだ!」とも思わないですが。



以上、Swiftと関係あるのかどうか微妙な、どうでもいい話でした