evgenyspace
@evgenyspace
Исследователь

Как лучше писать код?

Здравствуйте! Из пяти функций собираю одну:

sortFunction(
   getStore(
      getFirstProperty, getSecondProperty(getKeyIndex)
   )(x)
)(data)

get*Nth*Property могут меняться

Названия функций и параметров изменены... Я понимаю, что это треш, но как лучше?
Использовать ли практику
const fn = (gn) => (...args) => ...
или лучше
const fn = (...args) => gn(...args) + something else
?

Исходные функции:

const getFirstProperty = (x, y) =>
    y * Math.ceil(x / y)

const getSecondProperty = (getKeyIndex) => (array) => (key) => {
    let entries = new Map(array)
    let keys = Array.from(entries.keys())

    return (entries.has(key))
        ? entries.get(key)
        : entries.get(getKeyIndex(keys)(key));
}


const getKeyIndex = (keys) => (key) => {
    let keyPos = [...keys, key]
       .sort((a, b) => a - b)
       .findIndex(i => i === key)

    return keys[keyPos - 1];
}


const setStore = (getFirstProperty, getSecondProperty) => (x) => (el) =>
    ({
        prop_1: getFirstPropery(x, el.el_prop_1),
        prop_2: getSecondPropery(el.el_prop_1)(getFirstProperty(x, el.el_prop_2)),
        prop_3: Math.round(getSecondProperty(el.el_prop_1)(getFirstProperty(x, el.el_prop_2)) * getFirstProperty(x, el.el_prop_2) * 100) / 100,
    })


const sortFunction = (getStore) => (data) =>
    data.map(getStore).sort( (a, b) =>  a.prop_3 - b.prop_3)
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
Вырви мозг) То что понял:
1) getKeyIndex: я бы сделал ее функцией, принимающей объект:
function getKeyIndex({ keys, key }) {
    const keyPos = keys
       .concat(key)
       .sort((a, b) => a - b)
       .findIndex(i => i === key)

    return keys[keyPos - 1];
}

Вообще, кстати, то что она возвращает не соответствует его названию. Возвращает же предыдущий key, а вроде как должен вернуть индекс эл-та.
2) Cудя по всему getSecondProperty работает только с getKeyIndex. Зачем тогда его передавать? Заведите getKeyIndex через function.

Вообщем:
1) Поговаривают, что нехорошо писать const fn = (gn) => {}, лучше function fn(){}
2) Функция должна делать только одно и название функции должно совпадать с тем, что она делает
3) Функция должна принимать 1-2 параметра, если больше, то лучше через объект и в самой функции пользоваться деструктором.
4) Делать функцию, которая возвращает функцию, которая возвращает функцию, которая возвращает функцию т.д лучше не надо
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы