はじめに
JavaScriptは強力ですが、誤解されているプログラミング言語です。 人々 は、それがオブジェクト指向プログラミング言語または関数型言語であると言いたいです。 他の人は、それがオブジェクト指向でも関数型プログラミング言語でもないと言いたいです。 一部の人は、両方のパラダイムを参照するか、どちらも参照しないと言いますが、この議論は先送りしましょう。
言語に許されている限り関数型プログラミングの原則を使用してJavaScriptで記述することを使命としましょう。
この一連の投稿は、あなたが私と一緒にこの旅に着手することを意味します。 そして、手始めに、あなたの頭の中にあるかもしれない関数型プログラミングに関する間違った概念のいくつかを明確にする必要があります。
関数型プログラミングは(強く)JSの世界で誤解されています
明らかに、JavaScriptの機能パラダイムを日々使用している開発者の重要なグループがあります。 JavaScriptの本当の意味を理解していないJavaScript開発者の大規模なグループがあると思います。
これは、サーバーサイドWeb開発に使用されるプログラミング言語のほとんどがCに根ざしているという事実の結果であり、機能プログラミング言語ではないことにほとんどの人が同意するだろうと思います。
2つのポイントがあります。 最初のポイントは、広く使用されている次のjQueryの例で示すことができます。
$(".signup").click(function(event){ $("#signupModal").show(); event.preventDefault(); });
ちょっと見てください。 JavaScriptでanいコールバック関数とも呼ばれる匿名関数を引数として渡しました。
これを関数型プログラミングと呼ぶ人もいます。 そうですか? そうでもない!
この例は、関数型プログラミングの重要な部分であるパラメーターとしての機能のデモです。 一方、この例は 、この例の3行で一般的に反対することのできる他のほぼすべての関数型プログラミングパラダイムにも反します。
2番目の瞬間はもう少し陰湿です。 これを読んで、一部のトレンディなJS開発者は自分自身について考えます。
まあ! 関数型プログラミングについてはすべて知っています。 私はすべてのプロジェクトでUnderscore.jsを使用しています
Underscore.jsは、至る所で使用されているかなり人気のあるJavaScriptライブラリです。 たとえば、単語のセットがあり、各単語の最初の2文字の対応するセットが必要だとしましょう。 Underscore.jsと組み合わせると、これは非常に簡単なタスクです。
var firstTwoLetters = function(words){ return _.map(words, function(word){ return _.first(word, 2); }); };
なるほど! このJavaScriptブードゥーを見てください。_.map
や_.first
ようなこれらの素晴らしい機能ユーティリティを使用します。 Leland、今あなたはそれに対して何を答えますか? 1
_.map
ような下線と関数は便利な機能的パラダイムですが、この例でそれらを一緒に使用する方法は...冗長で難しいように見えます。 これが本当に必要なのでしょうか?
物事についてもう少し「機能的に」考え始めると、おそらく上記の例をとると、これが得られます。
// ... var firstTwoLetters = map(first(2));
考えてみると、上の5行と同じ情報が1行で表示されます。
words
と
word
単なるパラメーター/プレースホルダーです。 ロジックの本質は、
map
関数、
first
関数、および定数
2
を意味のある方法で結合することです。
一部の人は、この例を見て、「魔法のドロップ」とはどのようなものかを考えるかもしれません。 最終的に、例のように「魔法のドロップ」を使用して例を埋め込むことは、一種の欺ceptionのようなものですか?
さて、この「魔法のドロップ」について説明するために、以下の記事をいくつか紹介しますので、興味があれば、続けてください。
この一連の投稿は、JavaScriptのコンテキストで関数型プログラミング言語から美しさを借りることを他の人が学ぶのを助けるように設計されています。
次の投稿では、機能的ではないが機能的であるさまざまなJavasScript要素について説明します。 この知識をもとに、関数型プログラミングの基本的なブロックとJavaScriptでの外観をゆっくりとまとめていきます
続きを読む->パート2:言語を「機能的」にするものは何ですか?
エラーや不正確な点については、 こちらにご記入ください。
1投稿者Leland Richardson