私はしばらくの間 Web 開発者であり、最近関数型プログラミングの学習を開始しました。他の人たちと同じように、私はこれらの概念の多くを専門的な仕事に適用するのにかなりの苦労をしました。私にとって、これの主な理由は、ステートレスであり続けるという FP の目標と、私が行ったほとんどの Web 開発作業が非常にデータ中心のデータベースに大きく結びついているという事実との間に矛盾があるように見えることです。
OOP 側の開発者としての生産性を大幅に向上させたのは、.Net 用の MyGeneration d00dads、perl 用の Class::DBI、Ruby 用の ActiveRecord などのオブジェクト リレーショナル マッパーを発見したことです。挿入ステートメントと選択ステートメントを 1 日中書くことから解放され、データをオブジェクトとして簡単に操作することに集中できます。もちろん、SQL クエリの機能が必要な場合は引き続き SQL クエリを作成できましたが、それ以外の場合は、バックグラウンドで適切に抽象化されていました。
さて、関数型プログラミングに目を向けると、Links のような多くの FP Web フレームワークでは、この例のように定型的な SQL コードをたくさん書く必要があるようです。Weblocks は少し優れているように見えますが、データを操作するためにある種の OOP モデルを使用しているようで、この例のようにデータベース内のテーブルごとに手動でコードを記述する必要があります。コード生成を使用してこれらのマッピング関数を記述していると思いますが、それは明らかに Lisp らしくないようです。
(私は Webblock や Links をあまり詳しく見ていないことに注意してください。それらがどのように使用されているかを誤解しているだけかもしれません)。
問題は、Web アプリケーションのデータベース アクセス部分 (かなり大きいと思います)、または SQL データベースとのインターフェイスを必要とするその他の開発では、次のパスのいずれかを強制されるように思われることです。
- 関数型プログラミングを使用しない
- 多くの SQL または SQL に似たコードを手動で記述することを含む煩わしい抽象化されていない方法でデータにアクセスするリンク
- 関数型言語を疑似 OOP パラダイムに強制することで、真の関数型プログラミングの優雅さと安定性の一部を取り除きます。
明らかに、これらのオプションはどれも理想的とは思えません。これらの問題を回避する方法を見つけましたか? ここに本当に問題がありますか?
注: 私は個人的に FP の面で LISP に最も精通しているので、例を挙げて複数の FP 言語を知りたい場合は、おそらく lisp が最適な言語になるでしょう。
PS: Web 開発の他の側面に固有の問題については、この質問を参照してください。