Dieser Artikel ist Teil der Reihe Writing Software über funktionale Programmierung und verschiedene Techniken zum Schreiben von JavaScript ES6 + -Programmen, beginnend mit den Grundlagen. Vorheriger Abschnitt: Software schreiben: Eine Einführung
Vergessen Sie alles, was Sie über JavaScript wissen, und versuchen Sie, diesen Artikel so zu interpretieren, als wären Sie ein Anfängerprogrammierer. Um Ihnen zu helfen, werden wir JavaScipt von Grund auf behandeln, als hätten Sie JavaScript noch nie gesehen. Nun, wenn Sie ein Anfänger sind, dann haben Sie Glück. Lassen Sie uns zum Schluss versuchen, ES6 und funktionale Programmierung von Grund auf neu zu lernen! Glücklicherweise werden alle neuen Konzepte auf dem Weg erforscht - aber rechnen Sie nicht zu viel damit.
Wenn Sie ein erfahrener Entwickler sind, der bereits mit JavaScript oder einer rein funktionalen Sprache vertraut ist, ist JavaScript möglicherweise eine unterhaltsame Möglichkeit, die * [FP] -Welt zu entdecken: funktionale Programmierung. Legen Sie diese Gedanken beiseite und versuchen Sie, den Text mit offenem Auge zu betrachten. Möglicherweise entdecken Sie eine verborgene Ebene in der JavaScript-Programmierung, eine Ebene, von der Sie nie gewusst haben, dass sie existiert.
Da dieser Artikel den Titel "Software schreiben" enthält und FP offensichtlich eine Möglichkeit ist, ein Programm zu schreiben (unter Verwendung funktionaler Komposition, Funktionen höherer Ordnung usw.), könnten Sie sich fragen, warum wir kein Haskell, ClojureScript, verwenden oder Elm anstelle von JavaScript.
JavaScript enthält wichtige Funktionen, die für FP erforderlich sind:
Erstklassige Funktionen. Dies ist die Fähigkeit, Funktionen als Daten zu verwenden, d.h. Übergeben Sie Funktionen als Eingabeparameter, geben Sie Funktionen zurück und weisen Sie Variablen und Objekteigenschaften Funktionen zu. Diese Eigenschaft ermöglicht das Vorhandensein von Funktionen höherer Ordnung, was wiederum das teilweise Anwenden, Curryen und Zusammensetzen ermöglicht.
Anonyme Funktionen und Lambda-Syntax. Beispielsweise ist die Ansichtsnotation
x => x * 2
ein gültiger JavaScript-Ausdruck. Diese Syntax erleichtert die Arbeit mit Funktionen höherer Ordnung erheblich.
. - . . , , , , . , . - , . ,
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 .