見出し画像

オブジェクト指向から関数指向過渡期における設計戦略について

関数指向という言葉があるのかないのかはよくわからないけど。

本日、大学の事務のお姉さんをバイオリンリサイタルに誘うために大学へ行ったところ、関数型プログラミング言語の開発で著名なある先生(ここで実名を出してよいかわからないのであえて書かない。)とランチをご一緒できた。その機会に標記の件に関連する質問をしたので、書いておこうと思う。

以前から「関数型プログラミング=バグが少ない」という話は聞いているが、私自身関数型プログラミングはそれほど触っていないのでいまいちピンと来ていない。以下、先生の説明を私がどれだけ正確に文字起こしできているかはわからないのでご了承を。

先生によると、まず「関数型プログラミング=バグが少ない」大きな理由として「型がある」こと。型が合わないものは全部コンパイラがはじいてくれる。データを中心に据えて関数型言語でプログラミングすると、自然に関数には最小限のデータを渡すようになるので、それで更にコンパイラによる型のチェックが生きる。それから、単に型があるだけでは不十分で、関数型言語では(ここの一番肝心なところが、やはり私は理解できてなかったので、まだ言語化できない)が、型と関数型言語を組み合わせるとバグが減ることが経験的にわかっている。ということでした。あと、関数型言語を使用しても、副作用の濫用など、使い方次第ではバグ削減効果は薄れるとのこと。

そして本題。私が標記の件について質問したのは、オブジェクト指向言語で書かれたライブラリやフレームワークは豊富にあり、採用実績・動作実績もあり、アップデートの頻度も落ち着いて、枯れた技術と呼ばれるものもある。一方で、関数型言語はまだまだ開発者人口が少なく、そこまでライブラリが豊富というわけではないのではないかと感じた。(←ただのカン)

そこで、まず、アプリ部分にJavaVMで動く関数型言語を使用して、フレームワークやライブラリにJavaで書かれたものを採用するアイデア(よくあるやつ)について尋ねた。先生によると、Javaとの間でデータの受け渡しをすると型の情報が落ちてしまうとのこと。確かに、Javaの配列などはインタフェースが合っていればなんでも突っ込めてしまう。そうなると、アプリ側に型があるメリットが半減するのではないかとのご意見だった。

次に、F#からC#のライブラリを呼ぶアイデアについて尋ねた。これについては、コンパイラの設定で、C#でも型の情報が維持される方法があるとのこと。ただ、成否は採用するライブラリが、どういう前提で書かれたかによるとのこと。帰宅して考えたが、確かに、コンパイラの設定を変えるとコンパイル通らなくなるものが続出しそうな予感はする。

さて、みんなどうしてるのかな。標準ライブラリ以外フルスクラッチな人とかはいるのかな。



この記事が気に入ったらサポートをしてみませんか?