web-dev-qa-db-ja.com

関数型プログラミングはWeb開発に関連していますか?

私は最近、関数型プログラミングについて見てきましたが、Clojureは特に興味深いようです。私はそれが何であるかについての基本的な説明を「理解」していますが、たとえできるとしても、それをWeb開発者として日々どのように使用するかはわかりません。私が読んだことの多くは、通常のオブジェクト指向で見られる典型的なプログラミング状況ではなく、関数型プログラミングの数学側に焦点を当てています。

スティックの間違った端を取得しましたか?関数型プログラミングはWeb開発とはまったく無関係ですか?そうでない場合、「ウェブ用」に使用されている例はありますか?

86
Hates_

私の頭の上のいくつかの例:

29
Greg Case

関数型プログラミングはWebアプリに非常によくマッチします。 WebアプリはHTTPリクエストを受信し、HTMLの結果を生成します。これは、リクエストからページへの機能と考えることができます。

通常、長時間実行されるプロセス、ステートフルUI、および複数の方向のデータフローがあるデスクトップアプリと比較してください。これは、OOにより適しています。これは、状態とメッセージの受け渡しがあるオブジェクトを懸念しています。

62
JacquesB

Pure関数型プログラミングは、Webプログラミング環境にうまくマッピングできない場合があります。しかし、主な障害はインフラストラクチャ(フレームワークとAPI)の不足です。関数型言語がJava、Python、Rubyと同じくらい豊富なWebプログラミング環境を持つまでには、長い時間(おそらく、決して正直なことではありません)がかかるでしょう。

ただし、いくつかのオプションがあります。

これらの経験はありません。おそらく、コメンターは、彼らにとって何がうまくいったのかを検討することができます。

21
Chris Conway

なぜそうなのかわかりません-あなたが標準に準拠したHTMLをブラウザに提供している限り、彼らはあなたがそれを生成するために使用したものを気にしません。

20
Sherm Pendley

TwitterはScalaでバックエンドを書き直しました 、オブジェクト指向と機能の両方のパラダイムをサポートするJVM言語です。

また、 Lift WebフレームワークはScalaで記述されています。

15
James McMahon

Clojureには、ClojureとGoogle App Engineを使用して開発した興味深いスタートアップ(TheDeadline)があります。彼らは、Slideshareの良いpptとInfoQのインタビューを持っています。

GAEを使用したClojureのデプロイに関する適切な議論: http://news.ycombinator.com/item?id=1239788

私の知る限り、ClojureにはいくつかのWeb開発ライブラリがあります。コンポジュレリングコンジュレ

これがあなたの質問の一部に答えることを願っています=)(私もちょうど始めています..)

ベスト、ライアン

4
Ryan Teo

Your/Web をご覧ください。それは非常に高速で、静的型システムはHTMLやSQLなどのことを知っているので、セキュリティに関するあらゆる種類の素晴らしいことを保証できます。

3
Cyrus Omar

Erlangは、スケーラブルなWebアプリのインフラストラクチャの一部で多く使用されているようです。 CouchDBおよびRiakデータベースは、RabbitMQメッセージキューサーバーと同様に、ほとんどがErlangで記述されています。その成功の鍵の1つは、共有可能な可変状態なしで、メッセージの受け渡しを通じて並行性を処理することです。特定の関数型プログラミング言語よりも有用なのは、この問題の考え方です。

または、MapReduceをご覧ください。 mapおよびreduce関数が内部的にステートフルであっても、計算を見るための非常に機能的な方法です。そのため、フォールトトレラントな分散方法で大規模なデータセットを照会するのに非常に適しています。

どうしても、あなたにとって最も実用的だと思われるものなら何でも使ってください。しかし、いつ関数型プログラミングが役立つかわからないので、常に関数型プログラミングを心の奥に置いてください。

3
Peter Scott

Web開発とはまったく無関係ではありません。サーバー上にあるアプリは、クロージャー、高階関数、不変性、参照の透過性などの機能的機能を非常にうまく活用できます。たとえば、何らかの方法で変換または操作する必要があるコレクションがあります。ここでは関数型プログラミングが役立ちます。その理由は、そのイディオムが主流の言語に浸透しているからです。機能的な機能は、簡潔さ、テスト容易性、並列化に役立ち、パターンを使用して解決する問題に対するネイティブソリューションも提供できます。

更新:関数型言語用のWebフレームワークもあります。 Common LISPのWeblock、Lift for Scala。これらは私が聞いたものですが、もっとあるかもしれません...しかし、あなたは必ずしも純粋に機能的である必要はありません-例えばScalaは純粋ではなく、 Javaフレームワーク、ビジネス層などに関数型プログラミングを使用することができます。

3
Germán

Javascript(WebのFE部分の言語、およびますますBEも)は機能しませんが、機能は一次機能です

2
Marcus Westin

言語とパラダイムはWebアプリにとって重要ではありません。それらはすべて同様に良い面と悪い面があります。新しいパラダイムを学ぶ理由を探しているなら、ただ飛び込んでください。私のアドバイスは、解決しようとしている問題を分析し、適切なツールセットを選択することです。

2
Chuck McKnight

彼らは エディンバラ大学でかなりクールなこと Webの関数型プログラミングを行っています。

2
Ali Afshar

Haskell を使用してWebアプリを構築する場合のWeb開発者のエクスペリエンスを次に示します。関数型言語は非常にタイプセーフであり、同時実行性に優れていますが、長い間学界の最愛の人でありながら、現実の世界に強く受け入れられていないため、APIの最高のものは常にありませんでした。それほど遠くないことを願っています。アーランはすでにそれに乗り込んでいた。

2
A_Var

バックエンドがすべてErlangで記述されたオンラインスプレッドシートを開始しました。

http://hypernumbers.com

どんな標準から見ても、これは精神的な複雑さを持つ巨大なGUIで構築できる最も複雑なWebアプリの1つです。

2
Gordon Guthrie

別の短い答え: http://www.mlstate.com -FPに基づく完全なWeb開発プラットフォーム。言語のクリーンなセマンティクスにより、あらゆる種類の自動化された安全性およびセキュリティ分析、最適化などが可能になります。

警告:そこで働いています。

1
Yoric

関数型言語は優れたアプリを構築するのに直接役立つとは限りませんが、アプリの構築には関数型プログラミングパラダイムを多用しています。純粋な関数型プログラミングでは、「副作用なし」という制約が課せられます。これにより、純粋な関数呼び出しが呼び出された順序にかかわらず、同じ結果が得られます。これはWeb開発には理想的ではありませんが、関数型プログラミングと状態変化システムを組み合わせれば、堅牢なWebアプリを構築できます。詳細については、私の論文をご覧ください。 FASTサーバー また、これらの スライド

1
gopi

関数型プログラミングがWebプログラミングで人気がある理由は、共有され変化する状態を明示し、プログラマーが純粋に機能的な部分を純粋な関数として表現できるようにするためです。純粋な関数には、副作用がないため、並列実行が非常に簡単であるという利点があります。

少なくともそれが私の理由です。

1
rbanffy

はい。関数型プログラミングは任意の言語で実行できるため、Web開発者として日常的に使用できます。

あなたは?それはあなたが解決しようとしている問題に依存します。関数型プログラミングはプログラミングのパラダイムであり、使用する場所は解決する問題によって異なります。

決定をより簡単にするために、OOPの概念を使用して問題を解決する方が簡単かどうかを考えてください。カプセル化、ポリモーフィズム、機能のような継承によって生活が楽になります。

はいの場合は、そこで関数型プログラミングを行わず、単にOOPを使用します。アプリケーションが複雑な計算/計算/ビジネスロジックを実行し、重度の同時処理を伴う場合、関数型プログラミングはそのような場合に多くのツールと利点を提供できます。

これらは、プログラムの構造と要素を構築するための異なるスタイルであるため、適切なツールを適切な仕事に使用することがすべてです。

Web開発の機能プログラミング:

JavaScriptは関数型プログラミングをサポートしており、Web開発のコンテキストでは非常に支援的です。Reactフレームワークは関数型プログラミングの原則に大きく影響され、多くのWebアプリケーションで使用されています。

また、以下にリストされている関数型プログラミング言語で開発されたフレームワークで構築および実行されている多くのWebアプリケーションを見つけることができます。

•WebSharper(F#)

•スナップ(Haskell)

•リフト(スカラ)

•Ocsigen(OCaml)

•シカゴボス、ゾトニック(erLang)

希望私の答えが誰にでも役立つでしょう。

0
Amit Agrawal