以下の、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と関係あるのかどうか微妙な、どうでもいい話でした