Haskellは全てが関数だからいいのだろうけど、Scalaは引数のない関数呼び出しの括弧を省略できるというルールにより、おそらくわざと右辺における変数と関数呼び出しを同じように扱えるようにしている。そりゃ見た目はどんどん関数型言語っぽくなるのかもしれないが、ソースの可読性という観点では、その行だけを見てもそれが変数なのか関数呼び出しなのか判断できないのが良いことだとはあまり思えない。Scalaの入門書を読むと「まずはなるべくvarを使わにように工夫してみましょう」という誘導が行われる。変数への再代入を抑止することが関数型言語への導入となるからだ。で、もしかしてその先は、「valの使用も最小に」ということなのだろうか。defでも書けるのはdefにするのがより関数型言語っぽいのだろうか。
Pythonはもちろんそんなことはない。関数はちゃんと括弧を付けないと関数呼び出しにならない。Emacs Lispもそうだ。current-column では関数のラベルでしかなく、(current-column) で関数呼び出しになる。一般的には変数と関数呼び出しとを区別するのがあたりまえとなっている。
そういえばC#はプロパティ機能で変数と関数呼び出しを融合してた。しかも左辺側も。流行? 時代の流れ? C#はちっとも関数型っぽくはないわけだが。
2014.07.15
OSTRACISM CO.
OSTRA / Takeshi Yoneki