Лучший способ отформатировать простую функцию When в JS - PullRequest
3 голосов
/ 08 марта 2020

Я нашел этот код в Ruby (из здесь ):

DX = { E => 1, W => -1, N =>  0, S => 0 }

, и я думал о том, как лучше отформатировать его в JS, учитывая, что его не хватает функция «когда».

Для справки, N, S, E и W являются «направлениями» и имеют псевдонимы, такие как: const N = 1, S = 2, E = 4, W = 8;

Я изначально хотел сделать быстрый Функция стрелки, но затем пошла с этим:

function DX(dir) {
    if(dir==E) return 1;
    if(dir==W) return -1;
    if(dir==N) return 0;
    if(dir==S) return 0;
}

Это выглядело немного долго, поэтому я попытался сократить его:

function DX(dir) {
    if(dir==E) return 1;
    if(dir==W) return -1;
    return 0;
}

И затем снова:

function DX(dir) {
    return dir==E ? 1 : dir==W ? -1 : 0;
}

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

// returns the distance in x traveled by that direction
// E => 1, W => -1, N =>  0, S => 0
function DX(dir) {
    return dir==E ? 1 : dir==W ? -1 : 0;
}

И, наконец, я преобразовал его в переменный синтаксис и функцию стрелки:

let DX = (dir) => dir==E ? 1 : dir==W ? -1 : 0;

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

Ответы [ 3 ]

2 голосов
/ 08 марта 2020

Используя объект, предложенный выше несколькими пользователями, мы можем сделать этот код намного проще. Однако мы столкнулись с проблемой объектов, используя буквенные строки «N», «S», «E» и «W» вместо цифр переменных c значений 1, 2, 4 и 8.

Я нашел ответ на эту проблему на SO , который просто добавляет квадратные скобки (в ES6):

const N = 1, S = 2, E = 4, W = 8;
const DX = { [E]: 1, [W]: -1, [N]: 0, [S]: 0 };

Может использоваться с: DX[dir]

1 голос
/ 08 марта 2020

Просто возьмите то же самое с объектом.

const DX = { E: 1, W: -1, N: 0, S: 0 };

// use
value = DX[dir];

Для использования с числовыми значениями в качестве направления вам необходимо сопоставить ключи с указаниями.

//           N     S     E     W
const DX = { 1: 0, 2: 0, 4: 1, 8: -1 };

// use
value = DX[dir];
0 голосов
/ 08 марта 2020

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

const DX = dir => {
    mapping = { E: 1, W: -1, N: 0, S: 0 };
    return mapping[dir];
}
...