@Speakermen

Почему это не функция?

Почему toSlug2 функция, а toSlug1 нет?
//associative
add(add(x, y), z) == add(x, add(y, z));

//commutative
add(x, y) == add(y, x);

//identity
add(x, 0) == x;

//distributive
add(multiply(x, y), multiply(x, z)) == multiply(x, add(y, z));

//Deterministic
//No observable Side-Effects
//Reliable
//Portable
//Reusable
//Testable
//Composable
//Properties/Contract

//not a function
const toSlug1 = (title) => {
  const urlFriendly = title.replace('/W+/ig', '-');
  if (urlFriendly.length < 1) {
    throw new Error('is bad');
  }
  return urlFriendly;
};

//function
const toSlug2 = (title) => {
  return new Promise((res, rej) => {
    const urlFriendly = title.replace('/W+/ig', '-');
    if (urlFriendly.length < 1) {
      rej(new Error('is bad'));
    }
    return res(urlFriendly);
  });
};
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Попробую сыграть в угадайку.
1. Имеется в виду не "не функция", а "не чистая функция".
2. toSlug1 использует throw чтобы сообщить об ошибке, что сложно отразить в контракте и оно добавляет нелинейность в код.

Но тогда остаётся вопрос, почему toSlug2 назван чистой функцией, если catch у промиса такой же не обязательный.

PS: посмотрел расшифровку речи спикера - он как раз об этом и говорит.
toSlug1 не функция из-за того что у неё throw есть, а toSlug2 полностью линейный и детерминистический, без побочных эффектов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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