JavaScript: быстрый возврат, если функция возвращает ноль - PullRequest
1 голос
/ 20 июня 2019

Есть ли способ сократить этот фрагмент кода?

const result = getResult();
if (!result) {
    return;
}

// Work with result

У меня в коде их много, и я бы хотел сделать что-то вроде:

const result = getResult() || return;

// Work with result

EDIT: Я только хочу, чтобы сохраняемые данные сохранялись.

const parseInput = (input: string): void => {
   const convertedInput = convert(input);
   if (!convertedInput) {
       return;
   }

   persist(convertedInput);
}

Я знаю, что могу вызвать конвертер дважды. Но я хочу избежать этого:

const parseInput = (input: string): void => {
   if (!convert(input)) {
       return;
   }

   persist(convert(input));
}

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Вы можете сделать это

const result =  "default value" || getResult();

Если getResult равен нулю или не определен, тогда вы получите result в качестве «значения по умолчанию».Если это то, что вы хотите

function getResult() {
   return null;
}
const result =  "okay" || getResult();
console.log(result)

И когда getResult не определен, вы получаете

const result =  "okay" || getResult();
console.log(result)

По сути, синтаксис:

null || undefined || null || 0 || "okay" || "defined" // "okay" 

Идет слева направо и выбирает наиболее подходящее значение

1 голос
/ 20 июня 2019

Ваш код так же хорош, как он есть, однако, если вы хотите немного поэкспериментировать с функциональным стилем, вы можете заключить значение в «монаду», которая будет вызывать присоединенные функции, только если значение не равно нулю , Вот игрушечная реализация:

function maybe(x) {
    return {
        value: x,
        apply(fn) {
            if (this.value)
                this.value = fn(this.value)
            return this;
        }
    }
}

С этим maybe ваш пример будет выглядеть так:

const parseInput = input => maybe(convert(input)).apply(persist)

См. Ответ Оливера для более серьезного подхода.

0 голосов
/ 20 июня 2019

Я не знаю, даст ли этот ответ вам что-то, чем вы будете довольны, но мне кажется, что это потенциальное решение проблемы обработки неизвестных результатов.

Maybe s - это структуры, в которые встроена такая проверка. .map() ниже не будет вызываться, если в Maybe нет значения, поэтому код, который его использует, не должен проверять наличие значения.

Это означает, что вы должны изменить способ обработки этих значений, и, если вы не хотите писать свои собственные, это означает использование библиотеки. Как таковое, это вряд ли идеальное решение, но я надеюсь, что оно даст возможность, по крайней мере.

const { None, Some } = Monet;

const getResult = () => Math.random() > 0.5
  ? None()
  : Some(1);

const test = getResult()
  .map(x => x + 2);
  
console.dir(test.val);
<script src="https://cdn.jsdelivr.net/npm/monet@0.9.0/dist/monet.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...