Если утверждение короче логика - PullRequest
0 голосов
/ 16 июня 2019

Я пишу некоторый код, чтобы решить, нужно ли ему использовать фиктивные данные. Вот код:

let useMocks = false

const setMockSwitch = ({idNumber}) => {
    if (idNumber && idNumber === mockUser.idNumber) {
        useMocks = true
    }

    if (idNumber && idNumber !== mockUser.idNumber) {
        useMocks = false
    }
}

в случае, если idNumber передается в функцию и равен mockUser, а не "переключает" переключатель ...

Я пытаюсь придумать логическое решение, как сократить код и сделать его более читабельным. Я буду признателен за вашу помощь! Спасибо!

Ответы [ 3 ]

4 голосов
/ 16 июня 2019

Ну, вы могли бы просто воспользоваться тем фактом, что сравнения производят логические значения:

const setMockSwitch = ({idNumber}) => {
  if (idNumber)
    useMocks = idNumber === mockUser.idNumber;
};

О, и обратите внимание, что если mockUser.idNumber может когда-либо быть 0, это будет иметь проблемы (как иисходный код), потому что 0 проверяется как false в таком коде.

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

Вы можете уменьшить эту функцию до одной стрелки. Используя оператор короткого замыкания &&, вы можете убедиться, что useMocks установлен, только если idNumber определено

let useMocks = false

const setMockSwitch = ({idNumber}) => idNumber && (useMocks = idNumber === mockUser.idNumber)

Вы также можете написать его так, чтобы он не вызывал побочных эффектов, например,

const shouldUseMocks = ({idNumber}) => idNumber === mockUser.idNumber

idNumber && useMocks = shouldUseMocks({idNumber})

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

Если вы хотите, чтобы 0 был действительным idNumber,

let useMocks = false

const setMockSwitch = ({idNumber}) => idNumber !== void 0 && (useMocks = idNumber === mockUser.idNumber)

void 0 всегда возвращает истинный примитив undefined, а не любые локальные переменные, называемые undefined, поэтому это самый чистый способ проверки на неопределенность. Фактически вы можете поместить оператор void перед любым другим выражением, чтобы заставить его возвращать undefined

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

Предполагая, что mockUser.idNumber имеет действительное значение, которое вы ищете, вы можете просто сделать,

const setMockSwitch = ({idNumber}) => {
     useMocks = idNumber === mockUser.idNumber;
}
...