Нашёл следующие краткие сведения:
«СЕПУЛЬКИ — важный элемент цивилизации ардритов с планеты Энтеропия. См. СЕПУЛЬКАРИИ».
Я последовал этому совету и прочёл:
«СЕПУЛЬКАРИИ — устройства для сепуления»
Я поискал «Сепуление»; там значилось:
«СЕПУЛЕНИЕ — занятие ардритов с планеты Энтеропия. См. СЕПУЛЬКИ»
Иммутабельным?
Ленивым?
Декларативным?
Функциональный язык программирования - язык, основной абстракцией которого является функция.
*при этом функции должны быть обязательно высшего порядка
function User(name, surname){/*....*/}
(f, ...args) => (...restArgs) => f(...args.concat(restArgs))
let p = (f, ...args) => (...restArgs) => f(...args.concat(restArgs)) let add = (a,b) => a + b let add10 = p(add, 10) add10(20) // => 30
(f, g) => (x) => f(g(x))
let compose = (f, g) => (x) => f(g(x)) let shout = v => `${v}!` let loud = v => v.toUpperCase() let hellYeah = v => `${v}, hell yeah!` let loudShout = compose(shout, compose(loud, hellYeah)) loudShout('kurskmeetup') // => KURSKMEETUP, HELL YEAH!!
let Container = function(x) { this.__value = x } Container.of = x => new Container(x) Container.prototype.map = function(f) { return Container.of(f(this.__value)) }
map(id) === id;
Container.of('Kurskmeetup').map(shout) .map(hellYeah) .map(loud) // => Container("KURSKMEETUP, HELL YEAH!!")
{ users: [{ name: "FP-JS", id: 0 }] }
let getName = (obj) => { if(obj.users != null && obj.users[0] != null && obj.users[0].name != null) { return obj.users[0].name; } }
//PART 1 let Maybe = function(x) { this.__value = x; } Maybe.of = x => new Maybe(x) Maybe.prototype.isNothing = function() { return (this.__value === null || this.__value === undefined); } Maybe.prototype.map = function(f) { return this.isNothing() ? Maybe.of(null) : Maybe.of(f(this.__value)); }
//PART 2 Maybe.prototype.ap = function(other) { return this.isNothing() ? Maybe.of(null) : other.map(this.__value); }; Maybe.prototype.join = function() { return this.isNothing() ? Maybe.of(null) : this.__value; }
Maybe.of({event: 'kursk meet up'}) .map(_.prop('event')) .map(_.replace(/\s/g, '')) .map(loudShout) // => Maybe("KURSKMEETUP, HELL YEAH!!")
Maybe.of({}) .map(_.prop('event')) .map(_.replace(/\s/g, '')) .map(loudShout) // => Maybe(null)
let getName = compose(map(_.prop('name')), xs => Maybe.of(xs[0]), _.prop('users'));
_.add(Maybe(10), Maybe(20)) // ERROR
Maybe.prototype.ap = function(other) { return this.isNothing() ? Maybe.of(null) : other.map(this.__value); };
Maybe.of(_.add).ap(Maybe.of(2)).ap(Maybe.of(3)); // => Maybe(5) Maybe.of(_.add).ap(Maybe.of(null)).ap(Maybe.of(3)); // => Maybe(null) Maybe.of(10).map(_.divide(20)).map(_.add('4')).join() // => 42