Software de escrita: Por que aprender FP em JavaScript?

Este artigo faz parte da série Writing Software sobre programação funcional e várias técnicas para escrever programas JavaScript ES6 +, começando pelo básico. Seção anterior: Escrevendo software: uma introdução





Esqueça tudo que você sabia sobre JavaScript e tente interpretar este artigo como se você fosse um programador iniciante. Para ajudá-lo, vamos cobrir JavaScipt desde o básico, como se você nunca tivesse visto JavaScript. Bem, se você é um iniciante, então você está com sorte. Finalmente, vamos tentar aprender ES6 e programação funcional do zero! Felizmente, todos os novos conceitos serão explorados ao longo do caminho - mas não conte muito com isso.





Se você é um desenvolvedor experiente já familiarizado com JavaScript ou alguma linguagem puramente funcional, então você pode pensar que JavaScript é uma maneira divertida de descobrir o mundo * [FP]: programação funcional. Coloque esses pensamentos de lado e tente olhar para o texto com os olhos abertos. Você pode descobrir um nível oculto na programação JavaScript, um nível que você nunca soube que existia.





Uma vez que este artigo tem o título "Software de escrita", e FP é obviamente uma forma de escrever um programa (usando composição funcional, funções de ordem superior, etc.), então você pode perguntar por que não aceitamos Haskell, ClojureScript ou Elm em vez de JavaScript.





JavaScript contém recursos importantes necessários para FP:





  1. Funções de primeira classe. Esta é a capacidade de usar funções como dados, ou seja, passe funções como parâmetros de entrada, funções de retorno e atribui funções a variáveis ​​e propriedades de objetos. Essa propriedade possibilita a existência de funções de ordem superior, o que, por sua vez, possibilita a aplicação parcial, currying e composição.





  2. Funções anônimas e sintaxe lambda. Por exemplo, a notação de visualização  x => x * 2



     é uma expressão JavaScript válida. Essa sintaxe torna muito mais fácil trabalhar com funções de ordem superior.





  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