この記事は、基本から始めて、JavaScript ES6 +プログラムを作成するための関数型プログラミングとさまざまなテクニックに関するWritingSoftwareシリーズの一部です。前のセクション:ソフトウェアの作成:はじめに
JavaScriptについて知っていることをすべて忘れて、この記事を初心者プログラマーであるかのように解釈してみてください。あなたを助けるために、JavaScriptを見たことがないかのように、JavaSciptを非常に基本的なものからカバーします。さて、あなたが初心者なら、あなたは幸運です。最後に、ES6と関数型プログラミングを最初から学んでみましょう!幸いなことに、すべての新しい概念は途中で探求されますが、それをあまり期待しないでください。
JavaScriptまたは純粋に関数型言語に既に精通している経験豊富な開発者であれば、JavaScriptは* [FP]の世界である関数型プログラミングを発見するための楽しい方法だと思うかもしれません。これらの考えを脇に置いて、開いた目でテキストを見てみてください。JavaScriptプログラミングに隠されたレベル、つまり存在を知らなかったレベルを発見するかもしれません。
この記事のタイトルは「WritingSoftware」であり、FPは明らかにプログラムを作成する方法であるため(関数合成、高階関数などを使用)、Haskell、ClojureScriptを使用しない理由を尋ねられるかもしれません。 、またはJavaScriptの代わりにElm。
JavaScriptには、FPに必要な重要な機能が含まれています。
ファーストクラス関数。これは、関数をデータとして使用する機能です。関数を入力パラメーターとして渡し、関数を返し、変数とオブジェクトプロパティに関数を割り当てます。この特性により、高階関数が存在することが可能になり、その結果、部分適用、カリー化、および合成が発生する可能性があります。
匿名関数とラムダ構文。たとえば、ビュー表記
x => x * 2
は有効なJavaScript式です。この構文により、高階関数の操作がはるかに簡単になります。
. - . . , , , , . , . - , . ,
add(1)(2)
1
,add(1)
. :
/*
* :
* const add = function (x) {
* return function (y) {
* return x + y;
* }
* }
*/
const add = x => y => x + y;
const summ = add(1)(2);
JavaScript
JavaScript - , , .. . : () (, ), , ; - , - - . - , - , , .
- . :
const foo = {
bar: 'baz'
};
foo.bar = 'qux'; //
, . .
, JavaScript:
. "" . .
(). . , , . , ( , ) , .. , .
. - . .
for
,while
do ... while
.
: JavaScript "" (.. - . .). , . , JavaScript "" .
: . JavaScript , , , , Immutable.js Mori. , ECMAScript .
, , , const
ES6. , const
, . , const
.
const
, , . JavaScript freeze()
, , , - , . , JavaScript , .
: , JavaScript , " ". ( - . .).
. JavaScript, , ES6. , , Babel ( JavaScript , ES6 ES5), , .
: , .
JavaScript ,
, JavaScript , . , - (- - , , - . .). , -. Haskell -, , , - .
, , , , -, , "".
" - , ?" ~ , , . ", "
, , . - , :
" , , "", , , "", "". ~ . " ".
, - , . - -, . , , . , , .
JavaScript , , , .
, :
"... , ++ ( ) Java, "", "", , HTML."
Netscape , , , Scheme ( Lisp). :
" Netscape " Scheme" ".
JavaScript :
" , Java. Perl, Python Tcl Scheme."
, :
Scheme
Java
:
" , , scheme- self- ( ) (, , Self JavaScript - . .). Java, y2k, , ."
"" Java- , - JavaScript:
-
new
, -
class
extends
, .
: .
, JavaScript , "" ( Java, Flash ActiveX ).
, , JavaScript.
, , - JavaScript. , WebAssembly - , WebAssembly - JavaScript (AST). , WebAssembly JavaScript, ASM.js.
JavaScript :
, , JavaScript .
JavaScript . JavaScript , , , .
, - , . , (, ) - . , , , . , , , .
JavaScript , , npm
.
JavaScript - . , , , , , - , Java, Lisp C. JavaScript , , .
, JavaScript . , , , , ES6 - JavaScript , . JavaScript , , ?
JavaScript , , . Netflix ( Anglular 2+) , RxJS. Facebook , , Facebook Instagram. PayPal, KhanAcademy Flipkart Redux .
: Angular, React, Redux Lodash JavaScript, , Lodash Redux, , JavaScript .
" JavaScript?". , JavaScript , . JavaScript , " " Lisp, . , Haskell , Haskell.
. Haskell , JavaScript , .
, , JavaScript .