ホームページ >ウェブフロントエンド >jsチュートリアル >ELMによる機能的な反応性プログラミング:紹介
コアポイント
ELMは、最近かなりの注目を集めた機能的なプログラミング言語です。この記事では、それが何であり、なぜあなたがそれに注意を払うべきかを探ります。
ELMの主な焦点は、フロントエンド開発をよりシンプルで堅牢にすることです。 ElmはJavaScriptにコンパイルされるため、最新のブラウザのアプリケーションを構築するために使用できます。
elmは、タイプの推論を備えた静的にタイプされた言語です。タイプの推論とは、すべてのタイプを自分で宣言する必要がないことを意味します。コンパイラに多くのタイプを推測させることができます。たとえば、one = 1
を書くことにより、コンパイラはone
が整数であることを知っています。
elmは、ほぼ純粋に機能的なプログラミング言語です。 ELMは、純粋なビュー、参照透明性、不変のデータ、制御された副作用などの多くの機能パターンに基づいています。 HaskellやOcamlなどの他のML言語と密接に関連しています。
elmは反応的です。エルム内のすべてが信号を通過します。 ELMの信号は、時間の経過とともにメッセージを渡します。たとえば、ボタンをクリックすると、信号を介してメッセージが送信されます。
JavaScriptのイベントに似た信号を考えることができますが、イベントとは異なり、信号はELMの一流の市民であり、合格、変換、フィルタリング、および組み合わせることができます。
elm syntax
ELM構文はHaskellに似ています。どちらもMLファミリー言語だからです。
<code class="language-elm">greeting : String -> String greeting name = "Hello" ++ name</code>
これは、1つの文字列を取り、別の文字列を返す関数です。
なぜエルムを使用するのですか?
エルムをフォローする必要がある理由を理解するには、過去数年間のフロントエンドプログラミングのトレンドについて説明しましょう。
遷移domこれを行うのではなく、Reactや他のライブラリは、特定のDOM状態の説明に焦点を当てるという概念を普及させ、ライブラリがDOM変換を処理することに焦点を当てました。私たちは、私たちがそこにたどり着く方法ではなく、個別のDOM状態を説明することにのみ焦点を当てています。
これにより、書かれて維持する必要があるコードが大幅に削減されます。
イベントとデータ変換
これを行う代わりに、イベントに基づいてアプリケーションの状態を変更する必要がある方法を説明し、他の何かがこれらの変換を適用する必要があります。 JavaScriptでは、Reduxはアプリケーションの構築方法を人気にしています。
これの利点は、これらの変換を記述するために「純粋な」関数を書くことができることです。これらの機能は、理解してテストしやすいです。追加の利点は、アプリケーションの状態がどこに変更され、アプリケーションが維持されやすくなるかを制御できることです。
もう1つの利点は、私たちの見解が州を変える方法を知る必要がないことであり、どのイベントを派遣するかを知る必要があるということです。
一方向のデータフロー
不変のデータ
変数データにより、コンテンツを追加または削除できるコンポーネントは、コンテンツを追加または削除できるため、場所を変更することを困難にします。状態をどこでも変更できるため、これは予測不可能性につながります。
集中状態
フロントエンド開発のもう1つの傾向は、集中化された「原子」を使用してすべての状態を救うことです。これは、コンポーネントに散らばる代わりに、すべての状態を大きな木に置くことを意味します。
純粋なコンポーネント
もう1つの傾向は、純粋なコンポーネントを使用することです。これは、同じ入力が与えられた場合、コンポーネントが常に同じ出力をレンダリングすることを意味します。これらのコンポーネント内に副作用は発生しません。
これらは、アプリケーションをより堅牢で予測と保守をより堅牢にする優れたモデルです。ただし、JavaScriptでそれらを正しく使用するには、間違った場所で何かをしないように注意する必要があります(たとえば、コンポーネント内の状態を変更する)。
elmは、これらのパターンの多くを最初から考慮したプログラミング言語です。何か間違ったことをすることを心配することなく、それらを非常に自然に採用し、使用することができます。
ELMでは、次の方法を使用してアプリケーションを構築します。
JavaScript(および他の多くの言語)では、以下を実行してランタイムエラーを取得できます。
これにより、NANはJavaScriptのNANを返します。これは、ランタイムエラーを避けるために対処する必要があります。
<code class="language-elm">greeting : String -> String greeting name = "Hello" ++ name</code>エルムで似たようなことを試してみると:
コンパイラはこれを拒否し、
が多分タイプを返すことを伝えます。たぶんタイプには値が含まれているかもしれないし、そうでないかもしれないし、値が何もない場合に対処する必要があります。<code class="language-javascript">var list = [] list[1] * 2</code>
List.head list
これは、アプリケーションに多くの自信をもたらします。ランタイムエラーは、ELMアプリケーションではめったに見られません。
<code class="language-elm">list = [] (List.head list) * 2</code>
(次の部分は元のテキストに似ています。複製を避けるために少し調整してください)
(サンプルアプリケーション、ピースごとにそれを見てみましょう。記事の長さのために、ここでは省略されています。元のテキストはコード関数を完全に説明しており、ここでは繰り返されません。)
結論
ELMは、信頼できるアプリケーションを構築するための優れたモデルを採用するエキサイティングなプログラミング言語です。クリーンな構文があり、ランタイムエラーを回避するために多くのセキュリティ機能が組み込まれています。また、優れた静的タイプシステムもあります。これは、再構成プロセス中に非常に役立ち、型推論を使用するため、開発を妨げません。機能的リアクティブを使用してプログラムされたアプリケーションは慣れているものとは異なるため、ELMアプリケーションの学習曲線を構築する方法を学ぶことは容易ではありませんが、それだけの価値があります。
(追加のリソース、よくある質問、記事の長さのために、ここで省略されています。元のテキストは関連情報を完全に説明しており、ここでは繰り返されません。)
以上がELMによる機能的な反応性プログラミング:紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。