ブラウザーでリアクティブ プログラミングを行い、angular.js ( http://angularjs.org/ ) と Elm ( http://elm-lang.org/ ) を比較することを検討しています。
それぞれの相対的な利点/問題は何ですか?
ブラウザーでリアクティブ プログラミングを行い、angular.js ( http://angularjs.org/ ) と Elm ( http://elm-lang.org/ ) を比較することを検討しています。
それぞれの相対的な利点/問題は何ですか?
彼らは異なる獣、IMOだと思いますが、可能な限り宣言的であるという目標と、「ねえ、私たちがやるべきことをやろう」という態度を共有しています。
これで、AngularJSを使用すると、まだ「なじみのある」領域にいます。つまり、ここにマークアップを記述し、そこにJSを記述して、それを提供します。通常と同じワークフロー。AngularJSの「革新」は、私が知る限り、追加の要素タイプでHTMLを拡張して、アプリの多くの側面と動作をマークアップで宣言できるようにすることです。その後、そのJSライブラリに必要なものが含まれます。テンプレート作成、ルーティング、データバインディング、フォーム検証、ローカリゼーションなどを提供する機械(...これを書くと、おそらくAngularJSが少し肥大化するのではないかと思います)。これにより、非常に完全なWebアプリ開発フレームワークが作成されます。そして、それは宣言型のスタイルでコードを書くようにあなたを促します。
Elmを使用すると、(「典型的な」HTML / JSフロントエンド開発のバックグラウンドを持っている場合)本当に新しい領域に入ります。これは、GUI開発を行う(そして考える)ための別の方法です。関数型リアクティブプログラミングの方法でGUIを作成するために特別に作成された、まったく新しい言語で記述します。理想的には、従来のDOM APIを(少なくとも直接ではなく)処理することはありません。Elmには、グラフィック/テキストなどを時間の経過とともに作成および操作するためのツールを提供する一種の「標準ライブラリ」が付属しています。
Elm言語コードは、時間の経過やイベント(ユーザー入力など)が発生したときにGUIをどのように表示し、どのように動作させるかを完全に宣言的な方法で記述します。次に、ブラウザで実行される順序ですべてをHTML / JS/CSSにコンパイルします。
ニレもとても若いです。それが不利であるかどうかを判断するのはあなたとあなたのニーズ次第です。
AngularJSを選択するのは、「このJSlib/フレームワークを試してみましょう」と同じ古いプロセスだと思います。これはJSの世界で慣れているプロセスです。libファイルを取得してプロジェクトに追加し、そのAPIの使用を開始します。一方、Elmでは、ワークフローと問題の解決策に異なる方法でアプローチする必要があります。
AngularJSは多くの構造を提供し、たとえばBackbone.jsとは異なりますが、結局のところ、高度なGUIやグラフィック動作を実行したい場合は、AngularJSを使用して大量の記述に戻ることができます。 Elmを使用している場合は、書く必要のない配管ボイラープレートのもの。
一方、今までにWebで使用していた通常のGUIウィジェットを使用して、大規模なWebアプリを今すぐ開発してリリースする必要がある場合は、AngularJSの方が安定しているので、このウィジェットを使用することをお勧めします。
そうは言っても、Elmは、現時点でフロントエンド開発の世界で起こっている最も興味深く有望なことだと思います。また、グラフィックスを多用するものを今日開発してリリースする必要がある場合は、 Elmを使用します。これは、非常に複雑なGUIを数行のコードで実行できるためです。しかし、私は最初にその考え方に取り掛かる必要があり、それが非常に若く、既存のJSフロントエンドコードベースと統合することは簡単ではないか、可能性さえないという事実に対処する必要があります。
編集:
2015年3月の時点で、Elmははるかに堅牢であり、そのための優れたツールがあります(タイムトラベルデバッガーが思い浮かびます)。
Angularは、まあ、同じままです。Angularのアプローチは、モデルが変更されるたびに発生するアプローチ(「双方向データバインディング」)により、ブラウザーベースのゲームなどにはまったく不適切であることに注意してください。 Elmは、優れたパフォーマンスを発揮する必要のあるゲームや高度なGUIに優れています。さらに、Elmには、HTMLで話す必要がある場合に備えて、高速な(仮想dom差分アプローチを使用した)HTMLライブラリが用意されています。
Elmで選ぶ私の骨は、その型システムがたとえばHaskellのものほど表現力がないということです。これは贅沢を求めていると思う人もいるかもしれませんが、それどころか、基本的な機能を表現する能力を失うことです。特に、経験豊富なJSプログラマーは、表現力が不十分な静的型システムに悩まされています。これは、JSで簡単に表現するために使用されるポリモーフィックコードが、ランク2などがないためにElmで型エラーになるためです。タイプ。
幸いなことに、Elmに欠けているすべての「ウィッシュリスト」機能は、それらとその代替案について継続的に議論されているため、そこにはありません。したがって、彼ら(または最良の選択肢)が最終的にその言語に到達することは間違いありません。
複雑な静的グラフィカル レイアウトと双方向性は、HTML/CSS/JavaScript フレームワークよりも Elm の方がはるかに単純です。Elm では、偶発的な複雑さは型にありますが、それらについて学ぶ価値は十分にあります。それらは、ソフトウェアの理解、デバッグ、および変更をより適切に行うのに役立ち、関数型プログラミングのバックグラウンドを持っている場合は、既に慣れているはずです。Elm を HTML/JSに埋め込むこともできるため、理論的には徐々に移行できることに注意してください。