ホームページ > 記事 > ウェブフロントエンド > JavaScript の分解を可能にする関数共有
この記事では、主に JavaScript から脱却するための関数型プログラミングの使用方法を紹介します。編集者はこれが非常に優れていると考えたので、参考として共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。
DHTMLについて
DHTMLとはDynamic HTMLの略で、従来の静的HTMLに比べて動的HTML(標準的なユニバーサルマークアップ言語によるアプリケーション)のことです。いわゆるダイナミック HTML (略して DHTML) は、実際には新しい言語ではありません。これは、HTML、CSS、およびクライアント側スクリプトを統合したものにすぎません。つまり、ページには html+css+javascript (またはその他のクライアント側スクリプト) が含まれています。 scripts))、CSS およびクライアント スクリプトは、関連ファイルにリンクするのではなく、ページに直接書き込まれます。
当時、JavaScript はゆっくりと進化し、主にフォームの検証に使用されていました。そのため、今ほど人気はなく、注目も集めませんでした。ブラウザで JavaScript を無効にしても、アプリケーションが引き続き正常に使用できることを確認する必要があります。その後、jQuery、Knockout、Angular、React、Vue などのフレームワークが次々に登場しました。
同様に、JavaScript も加速度的に進化しています。私たちが ES6 を使用してからほんの少しの期間しか経っていませんが、今では人々はほとんど ES7 を飛ばして ES8 について話し始めています。
そして、TypeScript、CoffeScript、ClojureScript、ELM など、多くの代替手段があります。
私たちはあまりにも多くのフレームワークや言語に圧倒されており、それらをすべて把握して習得するのは困難です。
間違ったルート
JavaScript が成熟するにつれて、オブジェクト指向プログラミング (OOP) の概念が取り入れられ、私はそれが大好きでした。
私はクラスを作成するさまざまな方法をすべて試し始め、最終的に継承を正しく使用できるようになりました。私は自分にこう言いました。JavaScript は本当に言語のように見え始めています。
しかし、OOP が JavaScript によって導入された最悪のデザインであることを発見したのは、何年も経ってからでした。
私は C# についての理解を JavaScript に取り入れようとしています。最初は期待に胸を膨らませていましたが、後になって、あまりにも複雑で頭が疲れるような内容であることがわかりました。
これは主に、JavaScript のプロトタイプの継承が C# とは異なるためです。私は毎日 console.log(this) のようなエレガントなコードを書くことに慣れています。しかし、今はどうでしょうか?うっかりルールを守らないと、悪夢を見ることになります。プライベート メソッドとプライベート値には名前の前にアンダースコアを付ける必要があり、プライバシーを確保するためにクロージャーも使用する必要があります。
したがって、OOP が多くの問題を引き起こしただけでなく、OOP の追加によって多くの新たな問題も引き起こされました。
関数型プログラミング
最初は理解できませんでした。この関数コードを読んで理解することはできますが、その理由がわかりません。結局、私はそれを自分自身に強制的に学ばせました。
関数型言語は私に新しい視点を与え、プログラミングをまったく異なる方法で見ることを可能にしました。
最初は不自然に感じられ、慣れるまでに時間がかかります。すべての定義は関数に基づいており、値は変更できず、状態はありません。私は関数的思考を使って問題を解決します。不慣れだったため、習得するのに時間がかかりました。徐々に、関数型メソッドを使用したプログラミングに熟練してきました。そして、私はこのように書かれたすべてのコードの根本的な意味も知っています。
私のコードはより簡潔で、再利用しやすくなっています。徐々に、私が使用していた言語機能がコードから消えていき、私のコードは完全に別の言語で書かれたように見えてきました。まだ JavaScript を使用していますか?
1. var を使用しなくなりました
var を const に置き換えました。機能的なデザインを通じて、私の機能は純粋になります。変数の値は、操作されないように、再度変更されません。
コードをチェックして、すべての var (let も含む) ですべての宣言が const を使用していることを確認します。
2. forループはありません
プログラミング言語を学ぶとき、最初にforループを学びます。しかし、関数型プログラミングを学んで以来、for ループをフィルター、マップ、リデュースを使用するように変更しました。追加の計算が必要な場合は、再帰または Lazy.js などのサードパーティ ライブラリを使用します。
私のコードには for ループがありません。見つけたら教えてください。削除します。
3. if も簡略化できます
私は、if 内に大きなコードブロックを書くのをやめ始めました。内部のロジックを抽出し、別の関数に組み込みました。このように、三項演算子 (a?b:c) を使用すると簡略化できます。
最近のコードには if ステートメントがほとんどありません。他の開発者が私のコードを理解しやすくするために、私はこのコードをほとんど使用しません。
4. switch に別れを告げましょう
同様に、私は switch を使用するのは好きではありませんが、機能的な書き方を探しています。
私は、swtich の代わりに Ramda の cond 演算子を使用するのも好きです。
5. 心配しないでください
はい、よく聞きました!これを完全に排除することもできます。
Functional JavaScript を使用すると、煩わしい this の使用を完全に放棄できます
今では、データと関数のみが存在し、データですら関数の特別な表現にすぎません。これはもう必要ありません。私はオブジェクトを関数型言語の状態と関数として理解し始めました。 OOP のように、状態や関数をオブジェクトにバインドする必要さえありません。
オブジェクト指向設計は必要ありません
今振り返ってみると、表面オブジェクトプログラミングによってもたらされる複雑さは本当に不必要であることがわかります。関数型言語を使用して、同じ機能を実装し、同じタスクを実行できます。さらに、これらの複雑なオブジェクトを渡す必要がないため、コードが軽くなります。存在するのはデータと関数だけであり、関数はオブジェクトにバインドされていないため、再利用が容易です。従来のプロトタイプの継承が適切に設計されていないことによる問題を心配する必要はもうありません。
JavaScript 用のプライベート、パブリック、内部、または保護されたアクセス コントローラーの欠如はもはや問題ではありません。アクセス コントローラーは、オブジェクト指向プログラミングの導入による問題を解決するように設計されています。関数型 JavaScript では、こうした問題はもう存在しません。
概要
私のコードは完全に異なって見えます。これには、さまざまな ES6 モジュールに作成した純粋な関数が多数含まれています。これらの関数を使用して、より複雑な関数を構築できます。多くの関数は非常に単純な 1 行のラムダ式です。
今、ソフトウェアについての私の考え方が変わりました。入力はデータ ストリームであり、プログラムはデータ ストリームに作用してデータに対してさまざまな操作を実行し、新しいデータを返します。
プログラミング言語に対する関数設計の影響は遍在しており、C# の LINQ がその最良の例です。同様に、Java 8 には関数型言語機能も導入されています。
関連する推奨事項:
XML 動作 (動作) の詳細な紹介 - 新しい DHTML?
以上がJavaScript の分解を可能にする関数共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。