Menulis Perangkat Lunak: Mengapa Belajar FP di JavaScript?

Artikel ini merupakan bagian dari rangkaian Penulisan Software pada pemrograman fungsional dan berbagai teknik penulisan program JavaScript ES6 +, mulai dari dasar-dasarnya. Bagian Sebelumnya: Perangkat Lunak Penulisan: Pengantar





Lupakan semua yang Anda ketahui tentang JavaScript dan cobalah menafsirkan artikel ini seolah-olah Anda adalah programmer pemula. Untuk membantu Anda, kami akan membahas JavaScipt dari yang paling dasar, seolah-olah Anda belum pernah melihat JavaScript. Nah, jika Anda seorang pemula, maka Anda beruntung. Terakhir, mari kita coba mempelajari ES6 dan pemrograman fungsional dari awal! Untungnya, semua konsep baru akan dieksplorasi di sepanjang jalan - tetapi jangan terlalu mengandalkan itu.





Jika Anda adalah pengembang berpengalaman yang sudah terbiasa dengan JavaScript atau beberapa bahasa fungsional murni, maka Anda mungkin berpikir JavaScript adalah cara yang menyenangkan untuk menemukan dunia * [FP]: pemrograman fungsional. Singkirkan pemikiran ini dan cobalah untuk melihat teks dengan mata terbuka. Anda mungkin menemukan level tersembunyi dalam pemrograman JavaScript, level yang tidak pernah Anda ketahui ada.





Karena artikel ini memiliki judul "Perangkat Lunak Menulis", dan FP jelas merupakan cara untuk menulis program (menggunakan komposisi fungsional, fungsi tingkat tinggi, dll.), Anda mungkin bertanya mengapa kami tidak menggunakan Haskell, ClojureScript , atau Elm, bukan JavaScript.





JavaScript berisi fitur penting yang diperlukan untuk FP:





  1. . , .. , . , , , , .





  2. -. ,  x => x * 2



      JavaScript. .





  3. . - . . , , , , . , . - , . ,  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:





  1. . "" . .





  2. (). . , , . , ( , ) , .. , .





  3. . - . .  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."





, :





  1. Scheme





  2. 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 .








All Articles