Software de escritura: una introducción

Este artículo es parte de la serie de software de escritura sobre programación funcional y diversas técnicas para escribir programas JavaScript ES6 +, comenzando con lo básico. Manténgase conectado, ¡muchas cosas nuevas por venir!





Composición: "Acción que consiste en hacer un todo a partir de partes o elementos".





En mi primera lección de programación en la escuela secundaria, me dijeron que el desarrollo de software es "dividir problemas complejos en sus partes constituyentes y luego combinar soluciones simples en soluciones complejas para resolver el problema original".





Sobre todo en mi vida, lamento no haber entendido la importancia total de esta lección desde el principio. La esencia del desarrollo de software me quedó clara demasiado tarde.





He realizado cientos de entrevistas con programadores y esto me ha hecho comprender que no estoy solo. Muy pocos programadores captan realmente la esencia del proceso de desarrollo de software. No conocen las herramientas más importantes a nuestra disposición, o simplemente no saben cómo utilizarlas correctamente. Absolutamente todo el mundo tuvo dificultades para responder una o ambas preguntas sobre los aspectos más importantes del desarrollo:





  • ¿Qué es la composición funcional (composición funcional)?





  • ¿Qué es la composición de objetos (composición 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 , , .





, .





, , .





, , , , . .





Ahora es el momento de simplificar y la mejor manera de hacerlo es comprender la esencia. Sin embargo, el problema es que casi nadie en la industria comprende los conceptos básicos. Nosotros, la industria, lo hemos decepcionado como desarrollador. Es nuestra responsabilidad como industria educar mejor a los programadores. Debemos arreglarnos a nosotros mismos. Necesitamos asumir más responsabilidad. Todo lo que existe hoy en día depende del software, desde la economía hasta los equipos médicos. Literalmente, no hay lugares en la vida humana que no se vean afectados por la calidad del software. Necesitamos saber lo que estamos haciendo.





Ahora es el momento de aprender a desarrollar software.








All Articles