Можно ли использовать счет + 1 в троичном операторе? - PullRequest
2 голосов
/ 22 мая 2019

Что я хочу сделать, это проверить, есть ли элемент в массиве, если это так, я хочу увеличить счетчик.Компилятор сообщает об ошибке при подсчете ++, но не при подсчете +1, и он корректно увеличивается.Это потому, что count ++ - это операция, а не выражение, а count + 1 - выражение?

let count = 0;

//not working
count = checkArr(arr) ? count++ : count;

//working
count = checkArr(arr) ? count + 1 : count;

Ответы [ 4 ]

3 голосов
/ 22 мая 2019

Ничто не запрещено, но может быть принята хорошая практика.

Смешение назначения count =, кондиционирование ?: и последующее увеличение ++ - это много внутри одной строки.

Всегда используйте самое простое решение при кодировании чего-либо. В вашем случае:

if (checkArr(arr)) {
  count += 1;
}

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


Существуют инструменты контроля качества кода, такие как sonarqube, eslint ...

Они всегда требуют простоты.

Пример с троичными правилами:

Пример о пост / предварительном увеличении:

Они хотят, чтобы кодер избегал использования ++ / - потому что для некоторых людей это может вводить в заблуждение. Многие люди не знают разницу между ++var и var++, которая может привести к ошибкам. Предпочитаю var += 1;.

3 голосов
/ 22 мая 2019

Использовать префиксный оператор.Это потому, что с постфиксом значение увеличивается после первого чтения.С префиксом вы получите обновленное значение count до того, как оно прочитано.

count = checkArr(arr) ? ++count : count;

Должно работать

1 голос
/ 22 мая 2019

Допустимо использовать троичный оператор, подобный этому.Однако я бы поспорил о стиле кода здесь.

count = checkArr(arr) ? count + 1 : count;

В этой строке expressionFalse part (after :) совершенно бесполезен и ничего не делает, и он используется только для того, чтобы сделать синтаксис троичного оператора правильным.

Для этого случая ИМО более удобна для чтения:

if (checkArr(arr)) {
    ++count;
}

или

if (checkArr(arr)) ++count;
0 голосов
/ 22 мая 2019

значение count++ и ++count отличается.

Короче говоря:

count = count++: значение count++ равно значению ДО приращения.

count = ++count: значение ++count равно значению ПОСЛЕ приращение.

let count = 5;
console.log(count++); //return 5
console.log(count); //return 6

let count = 10;
console.log(++count); //return 11
console.log(count); //return 11

Это работает одинаково для count-- и --count

Однако следует отметить, что в случае, если это будет ошибкой, рекомендуется использовать +=1 вместо

.

Ссылка к сведению: https://eslint.org/docs/rules/no-plusplus

...