Нашёл следующие краткие сведения:
«СЕПУЛЬКИ — важный элемент цивилизации ардритов с планеты Энтеропия. См. СЕПУЛЬКАРИИ».
Я последовал этому совету и прочёл:
«СЕПУЛЬКАРИИ — устройства для сепуления»
Я поискал «Сепуление»; там значилось:
«СЕПУЛЕНИЕ — занятие ардритов с планеты Энтеропия. См. СЕПУЛЬКИ»
Иммутабельным?
Ленивым?
Декларативным?
Функциональный язык программирования - язык, основной абстракцией которого является функция.
*при этом функции должны быть обязательно высшего порядка
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