Software de escrita: uma introdução

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 com o básico. Fique conectado, muitas coisas novas estão por vir!





Composição: "Uma ação que consiste em fazer um todo a partir de partes ou elementos."





Em minha primeira aula de programação no colégio, fui informado que o desenvolvimento de software é "decompor problemas complexos em suas partes constituintes e, em seguida, combinar soluções simples em soluções complexas para resolver o problema original".





Acima de tudo na minha vida, lamento não ter entendido a importância total desta lição logo no início. A essência do desenvolvimento de software ficou clara para mim tarde demais.





Conduzi centenas de entrevistas com programadores e isso me trouxe a compreensão de que não estou sozinho. Muito poucos programadores realmente entendem a essência do processo de desenvolvimento de software. Eles não estão cientes das ferramentas mais importantes à nossa disposição, ou simplesmente não sabem como usá-las corretamente. Absolutamente todos tiveram dificuldade em responder uma ou ambas as perguntas sobre as coisas mais importantes no desenvolvimento:





  • O que é composição funcional (composição de função)?





  • O que é composição de objeto (composição de objetos)?





, , . - . , , , . . . , - , .





. - , . 2013 Toyota  " "  , .. "-" 10000 .





, , , , DDoS ,   .





.





, , . (, , ), , , .





, , .





. :  f



  g



,  (f ∘ g)(x) = f(g(x))



.  



 - . , "  f



  g



  f



  g



  x



". ,  f



  ,  g



 ,  f



   g



.





, , :





const g = n => n + 1;
const f = n => n * 2;
const doStuff = x => {
  const afterG = g(x);
  const afterF = f(afterG);
  return afterF;
};
doStuff(20); // 42
      
      



,  promise



, :





const g = n => n + 1;
const f = n => n * 2;
Promise.resolve(20)
  .then(g)
  .then(f)
  .then(value => console.log(value)); // 42
      
      



, , (map



filter



, etc),  lodash



,  observables



  RxJS



, . - . - . -  this



  .





- .  doStuff()



  :





const g = n => n + 1;
const f = n => n * 2;
const doStuffBetter = x => f(g(x));
doStuffBetter(20); // 42
      
      



, "after g"  trace()



:





const trace = label => value => {
  console.log(`${ label }: ${ value }`);
  return value;
};
      
      



:





const doStuff = x => {
  const afterG = g(x);
  trace('after g')(afterG);
  const afterF = f(afterG);
  trace('after f')(afterF);
  return afterF;
};
doStuff(20); // =>
/*
"after g: 21"
"after f: 42"
*/
      
      



Lodash Ramda , . :





import pipe from 'lodash/fp/flow';
const doStuffBetter = pipe(
  g,
  trace('after g'),
  f,
  trace('after f')
);
doStuffBetter(20); // =>
/*
"after g: 21"
"after f: 42"
*/
      
      



,  pipe



  :





// pipe(...fns: [...Function]) => x => y
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
      
      



, , . . , , . , , . .





pipe()



  , , .  pipe()



 (  compose()



) . () . , , , , . ,  function



  =>



  ( doStuffBetter).





, , .





:





  • . , . , , . 4 7 . 7, . , 3- , . . , , , , , , .





  • -. , " -". , . , . . , , . - , - . , , .





  • . . , . , , , .





" " - , " - . "





" - , . […] ." - Wikipedia





:





const firstName = 'Claude';
const lastName = 'Debussy';
      
      



:





const fullName = {
  firstName,
  lastName
};
      
      



 Array



Set



Map



WeakMap



TypedArray



  . , - .





, " " , "" (Composite), , . , "" . , .





" " : " ", ,   (, , "", "", ""),  ( , , "", , , -   )   ( , , "", , , DOM-  ).





, . " " " ", " " , , .





, , ,  " : " (1989):





, "" .





 " " (1975). , Amazon Ebay, .





. , . " " , , , . - :





  • : ,





  • : - , . , ,





  • : , ,





  • : , , . , .





  • : " - , , . , , " - , " ".





JavaScript ( ). , . (), . , , - .





:





class Foo {
  constructor () {
    this.a = 'a'
  }
}
class Bar extends Foo {
  constructor (options) {
    super(options);
    this.b = 'b'
  }
}
const myBar = new Bar(); // {a: 'a', b: 'b'}
      
      



:





const a = {
  a: 'a'
};
const b = {
  b: 'b'
};
const c = {...a, ...b}; // {a: 'a', b: 'b'}
      
      



. , , :













  1. , .





, , () - () , . , , , .. . Java , Haskell - , .. , , . .





, JavaScipt , .





, , , , . - . JavaScript , , .





, .





, , .





, , , , . .





Agora é a hora de simplificar, e a melhor maneira de fazer isso é entender a essência. O problema, porém, é que quase ninguém no setor entende o básico. Nós, a indústria, decepcionamos você como desenvolvedor. É nossa responsabilidade como setor educar melhor os programadores. Devemos nos consertar. Precisamos assumir mais responsabilidades. Tudo hoje depende de software, desde a economia até equipamentos médicos. Literalmente, não há lugares na vida humana que não sejam afetados pela qualidade do software. Precisamos saber o que estamos fazendo.





Agora é a hora de aprender a desenvolver software.








All Articles