Schreibsoftware: Eine Einführung

Dieser Artikel ist Teil der Writing Software-Reihe über funktionale Programmierung und verschiedene Techniken zum Schreiben von JavaScript ES6 + -Programmen, beginnend mit den Grundlagen. Bleiben Sie in Verbindung, viele neue Dinge werden kommen!





Zusammensetzung: "Eine Handlung, die darin besteht, aus Teilen oder Elementen ein Ganzes zu machen."





In meiner ersten Programmierstunde in der High School wurde mir gesagt, dass Softwareentwicklung "komplexe Probleme in ihre Bestandteile zerlegt und dann einfache Lösungen zu komplexen kombiniert, um das ursprüngliche Problem zu lösen".





Vor allem in meinem Leben bedauere ich, dass ich von Anfang an nicht die volle Bedeutung dieser Lektion verstanden habe. Das Wesentliche der Softwareentwicklung wurde mir zu spät klar.





Ich habe Hunderte von Interviews mit Programmierern geführt, und dies hat mir das Verständnis gebracht, dass ich nicht allein bin. Nur sehr wenige Programmierer verstehen die Essenz des Softwareentwicklungsprozesses wirklich. Sie kennen die wichtigsten Werkzeuge, die uns zur Verfügung stehen, nicht oder wissen einfach nicht, wie sie richtig eingesetzt werden sollen. Absolut jeder hatte Schwierigkeiten, eine oder beide Fragen zu den wichtigsten Dingen in der Entwicklung zu beantworten:





  • Was ist funktionale Zusammensetzung (Funktionszusammensetzung)?





  • Was ist Objektzusammensetzung (Zusammensetzung von Objekten)?





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





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





, .





, , .





, , , , . .





Jetzt ist die Zeit für Vereinfachungen gekommen, und der beste Weg, dies zu tun, besteht darin, die Essenz zu verstehen. Das Problem ist jedoch, dass fast niemand in der Branche die Grundlagen versteht. Wir, die Branche, haben Sie als Entwickler im Stich gelassen. Es liegt in unserer Verantwortung als Industrie, Programmierer besser auszubilden. Wir müssen uns reparieren. Wir müssen mehr Verantwortung übernehmen. Alles hängt heute von Software ab, von der Wirtschaft bis zu medizinischen Geräten. Es gibt buchstäblich keine Orte im menschlichen Leben, die nicht von der Qualität der Software betroffen sind. Wir müssen wissen, was wir tun.





Jetzt ist es an der Zeit zu lernen, wie man Software entwickelt.








All Articles