Является ли хорошей идеей сделать выражение if-as в функциональном стиле в Javascript? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть вопрос. Я обычно пишу на таких языках, как Kotlin, Rust и Elm. Эти языки имеют функцию, которая позволяет мне получить значение из выражения if или switch, например:

Пример в ржавчине:

let x = 10
let biggerThanFive =
  if x > 5 {
    true
  } else {
    false
  }

Пример в Kotlin:

val x = 10
val biggerThanFive =
  if (x > 5) {
    true
  } else {
    false
  } 

Теперь в Javascript я редко сталкиваюсь с кодом, который использует if в качестве выражения (обычно я использую это с помощью анонимной функции и функции стрелки)

const x = 10
const biggerThanFive = (() => {
  if(x > 5) {
    return true
  }
  else {
    return false
  }
})()

Вместо этого, обычно это делается так:

const x = 10
let biggerThanFive

if(x > 5) {
  biggerThanFive = true
}
else {
  biggerThanFive = false
}

Есть ли причина , а не , чтобы использовать технику if-as-expression в Javascript?

Ответы [ 3 ]

5 голосов
/ 12 апреля 2020

Почему вы не используете выражение напрямую?

const
    x = 10,
    biggerThanFive = x > 5;
2 голосов
/ 12 апреля 2020

Если вам нужно вернуть просто true или false, вы можете поместить выражение непосредственно в присваивание.

const x = 10;
const biggerThanFive = x > 5;

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

const x = 10;
const biggerThanFive = x > 5 ? "Return when it's true" : "Return when it's false";

Для получения дополнительной информации вы можете обратиться к документации: Условный (троичный) оператор

1 голос
/ 12 апреля 2020

Тот код, который вы написали, не настолько функционален, как в случае с тамошним нечистым x:

const x = 10
const biggerThanFive = (() => {
  if(x > 5) {
    return true
  }
  else {
    return false
  }
})()

Кроме того, эта немедленно выполненная анонимная функция unidiomati c и очень запутанная для чтения.

Если бы я хотел сделать быстрое сравнение в функциональном стиле и в javascript, я бы сделал:

const biggerThanFive = _in => _in > 5
const isBigger = biggerThanFive(10)

Если бы я делал это много, я мог бы представить утилиту функция, которая позволила бы мне сделать это следующим образом:

const isTrue = (fn, _in) => fn(_in)
const res = isTrue(_in => _in>5, 19)

, что позволило мне избежать необходимости давать имя анонимной функции или явно вызывать ее.

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