Функция Arrow неявного возврата с использованием логического AND - PullRequest
2 голосов
/ 30 июня 2019

Есть ли побочный эффект (неблагоприятный эффект) при использовании неявного оператора return в функции стрелки, использующей логический оператор AND &&?

Это может включать проблемы с упаковщиками или с оптимизаторами, удаляющими код

Примеры:

// With return 
const tap = fn => val => {
    fn(val);
    return val;
  };
// Without explicit return
const tap = fn => val => fn(val) && val;
// In case fn(val) returns a falsy value
const tap = fn => val => (fn(val) || true) && val;
// Comma sequence (added from accepted answer)
const tap = fn => val => (fn(val), val);

1 Ответ

5 голосов
/ 30 июня 2019

Есть ли побочный эффект (неблагоприятный эффект) при использовании неявного оператора return в функции стрелки, использующей логический оператор AND &&?

Да, есть пара:

  1. Опасность технического обслуживания, которую вы отмечаете в своем вопросе: если fn(val) возвращает ложное значение, то значение , а не val, будет тем, что возвращает функция стрелки,Кто-то, редактирующий логику fn, вряд ли узнает, что код в другом месте предполагает, что он всегда возвращает истинное значение.

  2. Другая опасность обслуживания заключается в том, что добавление еще одного вызова или другой логики к стрелкеФункция более сложна, если для этого нужно выделить && выражение.

  3. Субъективно, такое может быть сложнее для чтения, особенно если учесть, что *Значение 1023 * имеет значение не только для того, чтобы избежать написания return.

Вы можете обратиться к # 1, используя (или некоторые скажут ab , используя) оператор запятой :

const tap = fn => val => (fn(val), val);

Я не рекомендую, просто отмечая, что это вариант.Оператор запятой оценивает свой левый операнд, отбрасывает этот результат, вычисляет свой правый операнд и принимает этот результат в качестве своего результата.Вам нужно () вокруг выражения при использовании выражения запятой в качестве краткого тела со стрелкой, поскольку в противном случае краткое тело заканчивается запятой.Это означает, что единственное, что вы сохраняете, это слово return.

Это может включать проблемы с упаковщиками или с оптимизаторами, удаляющими код

Только если эти упаковщикиили оптимизаторы имели ошибки в них.Их работа - правильно понимать код.Краткие тела стрелок не выходят за рамки этого права.

Но если говорить об инструментах: в общем, я предлагаю написать ваш код как ясно , насколько это возможно.Оставьте процесс создания как краткое , насколько это возможно, для minifiers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...