関数型言語は行数が1/2〜1/3になる

非常にアルゴリズムが難解なプログラムを書いていました。Java で書こうとして挫折して、JavaScript で挑戦して再度挫折し、静的型付け関数型言語である Scala で初めて書くのに成功しました。

できあがった Scala のコードは 300 行くらいだったのですが、それを Java に移植してみたら 700 行くらいにふくれあがりました。しかも、パッケージスコープの final 変数を大量に使っていて、getter/setter は全然作っていないのに、この行数です。getter/setter 作っていたら、800 行超えていたと思います。

限りなく忠実に再現しているにもかかわらず、移植した Java のソースを見て、このアルゴリズム手続き型言語で書けたかと自分に問うと、無理だと思います。なにかが、手続き型言語は冗長なんですよね。書くべきプログラムに対して、ソースコードへ一瞬で脳内コンパイルできるようなプログラムは手続き型言語でも全く問題がないのですが、アルゴリズムが複雑な場合は、静的型付け関数型言語は圧倒的にパワフルです。

Scalaコンパイラは最初 Java で書かれていたんですが、その後、Scala に移植されました。移植された後、ソースコードの行数は 1/2 ほどになったそうです。行数が全てではなく(この後の話と矛盾しますがソースコードの可読性落とせば行数は減らせるので)、僕にとってはソースコードの可読性が一番大事で、それの指標として行数を出しましたが、関数型言語は行数が1/2〜1/3になるみたいです。

でも、圧倒的に行数が短いのはJ言語だと思います。(これはネタね)