1

Тема: Лямбда лямбд, не розуміть

Озьдо повний код

Прихований текст

//Redux-Style Reducer
const person = (state = {}, action) => {
  switch(action.type){
    case 'ADD_INFO':
      return Object.assign({}, state, action.payload)
    default:
      return state;
  }
}

const infoAction = {type: 'ADD_INFO', payload: {name: 'Brian', framework: 'Angular'}}
const anotherPersonInfo = person(undefined, infoAction);
console.log('***REDUX STYLE PERSON***: ', anotherPersonInfo);

//Add another reducer
const hoursWorked = (state = 0, action) => {
  switch(action.type){
    case 'ADD_HOUR':
      return state + 1;
    case 'SUBTRACT_HOUR':
      return state - 1;
    default:
      return state;
  }
}
//Combine Reducers Refresher
const myReducers = {person, hoursWorked};
const combineReducers = reducers => (state = {}, action) => {
  return Object.keys(reducers).reduce((nextState, key) => {
    nextState[key] = reducers[key](state[key], action);
    return nextState;
  }, {});
};
/*
This gets us most of the way there, but really want we want is for the value of firstState and secondState to accumulate
as actions are dispatched over time. Luckily, RxJS offers the perfect operator for this scenario., to be discussed in next lesson.
*/
const rootReducer = combineReducers(myReducers);
const firstState = rootReducer(undefined, {type: 'ADD_INFO', payload: {name: 'Brian'}});
const secondState = rootReducer({hoursWorked: 10, person: {name: 'Joe'}}, {type: 'ADD_HOUR'});
console.log('***FIRST STATE***:', firstState);
console.log('***SECOND STATE***:', secondState);

я не можу наздогнати ось цю частину

const combineReducers = reducers => (state = {}, action) => {
  return Object.keys(reducers).reduce((nextState, key) => {
    nextState[key] = reducers[key](state[key], action);
    return nextState;
  }, {});
};

Як воно робе?

Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: 221VOLT1

2

Re: Лямбда лямбд, не розуміть

Замініть стрілочки на function, може, стане зрозуміліше.

Прихований текст

function combineReducers(reducers) {
    return function(state = {}, action) {
      return Object.keys(reducers).reduce(function(nextState, key){
        nextState[key] = reducers[key](state[key], action);
        return nextState;
    },{});
};

Подякували: FakiNyan, 221VOLT, leofun01, ostap34PHP4

3

Re: Лямбда лямбд, не розуміть

ааа, точно, от я затупив. Я забув про те, що коли тіло без {}, то там прихований return

Говоріть українською! Живіть українською! Відчувайте українською!

4

Re: Лямбда лямбд, не розуміть

є ще одне питання, як ось це мона переписати?

const basicScan = testSubject.scan((acc, curr) => acc + curr, 0);

якщо

const basicScan = testSubject.scan(function(acc, curr) {return acc+curr;}, 0);

то ставте лойс, і можете нічо не писати

Говоріть українською! Живіть українською! Відчувайте українською!

5

Re: Лямбда лямбд, не розуміть

А як ось це працює?

export const partyFilter = (state = person => person, action) => {
    switch(action.type){
        case SHOW_ATTENDING:
            return person => person.attending;
        case SHOW_ALL:
            return person => person;
        case SHOW_WITH_GUESTS:
            return person => person.guests;
        default:
            return state;
    }
};

Воно ж приймає

state

, котрий по замовчуванню дорівнює

function(person) { return person;  }

то як воно має доступ до

person

в тілі головної функції?

return person => person.attending;
Говоріть українською! Живіть українською! Відчувайте українською!

6

Re: Лямбда лямбд, не розуміть

аа, пойняв, це ж просто довільне ім'я змінної

Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: bunyk1

7

Re: Лямбда лямбд, не розуміть

Йоханий бабай, я таку фігню без дужок взагалі не можу зрозуміти.

export const partyFilter = (state = person => person, action) => {

це ж типу функція яка приймає параметр state, який по дефолту функція ідентичності і якийсь параметр action?

Подякували: 221VOLT1

8

Re: Лямбда лямбд, не розуміть

ага

Говоріть українською! Живіть українською! Відчувайте українською!

9

Re: Лямбда лямбд, не розуміть

тільки що був зустрів отаке

const password$ = Rx.Observable.fromEvent(password, 'keyup')
.map(({keyCode}) => keyCode – 48)
.filter(value => 0 <= value && value <= 9);

то дві години думав, що то за таке чудернацьке

value => 0 <= value
Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: koala, 221VOLT2

10

Re: Лямбда лямбд, не розуміть

FakiNyan написав:

тільки що був зустрів отаке

const password$ = Rx.Observable.fromEvent(password, 'keyup')
.map(({keyCode}) => keyCode – 48)
.filter(value => 0 <= value && value <= 9);

то дві години думав, що то за таке чудернацьке

value => 0 <= value

Я завжди вставляв  ES6 в babel компілятор - https://babeljs.io/repl/

Подякували: 221VOLT1

11

Re: Лямбда лямбд, не розуміть

FakiNyan написав:

тільки що був зустрів отаке

const password$ = Rx.Observable.fromEvent(password, 'keyup')
.map(({keyCode}) => keyCode – 48)
.filter(value => 0 <= value && value <= 9);

то дві години думав, що то за таке чудернацьке

value => 0 <= value

майже як в elixir ))
вітаю вас в чудному світі стрілочкових операторів))

https://blog.clever-games.win/
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
///// у творчій відпустці. не турбувати /////