Упростить вложенный if / else с повторяющимися результатами? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь упростить следующее:

function handleDirection(src) {
  if (src === 'left') {
    if (inverse) {
      tracker--;
    } else {
      tracker++;
    }
  } else {
    if (inverse) {
      tracker++;
    } else {
      tracker--;
    }
  }
}

, чтобы уменьшить количество условных выражений.src будет либо 'left', либо 'right' всегда.

Ответы [ 13 ]

0 голосов
/ 13 декабря 2018
function handleDirection(src) {
   var movement = 1;
   if(src === 'left')
     movement = -1;

   if(inverse)
     tracker += movement;
   else
     tracker -= movement;
}
0 голосов
/ 13 декабря 2018

Это можно упростить до троичного выражения, которое возвращает 1 или -1 в зависимости от состояния.Затем вы можете просто добавить это к tracker.

function handleDirection(src) {
  var delta = (src === 'left' && inverse) || (src !== 'left' && !inverse) ? -1 : 1;
  tracker += delta;
}

. Это можно еще больше упростить, используя логику, на которую @NinaScholz указала в своем ответе:

function handleDirection(src) {
  var delta = (src === 'left') === inverse ? -1 : 1;
  tracker += delta;
}
0 голосов
/ 13 декабря 2018

Вы можете проверить с результатом первой проверки.

Это эксклюзивная проверка ИЛИ.

// typeof inverse === 'boolean'

function handleDirection(src) {
    if (src === 'left' === inverse) {
        tracker--;
    } else {
        tracker++;
    }
}

Проверка оценивает выражение в следующем порядке (src === 'left') === inverse:

src === 'left' === inverse
---- first ---             returns a boolean value
--------- second --------- take result of former check & compairs it with another boolean
...