Cet article fait partie de la série de logiciels d'écriture sur la programmation fonctionnelle et diverses techniques d'écriture de programmes JavaScript ES6 +, en commençant par les bases. Restez connecté, beaucoup de nouveautés à venir!
Composition: "Une action consistant à faire un tout à partir de parties ou d'éléments."
Lors de ma première leçon de programmation au lycée, on m'a dit que le développement de logiciels consiste à «décomposer des problèmes complexes en leurs parties constituantes, puis à combiner des solutions simples en solutions complexes pour résoudre le problème d'origine».
Surtout dans ma vie, je regrette de ne pas avoir compris toute l'importance de cette leçon au tout début. L'essence du développement logiciel m'est apparue trop tard.
J'ai mené des centaines d'entretiens avec des programmeurs et cela m'a amené à comprendre que je ne suis pas seul. Très peu de programmeurs saisissent vraiment l'essence du processus de développement logiciel. Ils ne connaissent pas les outils les plus importants dont nous disposons, ou ils ne savent tout simplement pas comment les utiliser correctement. Absolument tout le monde a eu du mal à répondre à une ou aux deux questions sur les éléments les plus importants du développement:
Qu'est-ce que la composition fonctionnelle (composition fonctionnelle)?
Qu'est-ce que la composition d'objets (composition d'objets)?
, , . - . , , , . . . , - , .
. - , . 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'}
. , , :
, .
, , () - () , . , , , .. . Java , Haskell - , .. , , . .
, JavaScipt , .
, , , , . - . JavaScript , , .
, .
, , .
, , , , . .
Le moment est venu de simplifier, et la meilleure façon d'y parvenir est de comprendre l'essence. Le problème, cependant, est que presque personne dans l'industrie ne comprend les bases. Nous, l'industrie, vous avons laissé tomber en tant que développeur. Il est de notre responsabilité en tant qu'industrie de mieux éduquer les programmeurs. Nous devons nous réparer. Nous devons prendre plus de responsabilités. Aujourd'hui, tout dépend des logiciels, de l'économie aux équipements médicaux. Il n'y a littéralement aucun endroit dans la vie humaine qui ne soit affecté par la qualité des logiciels. Nous devons savoir ce que nous faisons.
Il est maintenant temps d'apprendre à développer des logiciels.