Почему мы не должны использовать ++ в javascript?

Возможный дубликат:
Зачем избегать операций increment ( "++" ) и decment ( "-" ) в JavaScript?

Я слышал в нескольких местах, что не рекомендуется использовать ++ и - в javascript, и вместо этого мы должны использовать + = 1 или - = 1. Кто-нибудь может объяснить, почему для меня?

Ответы

Ответ 1

Потому что у Дугласа Крокфорда есть собственное мнение о том, что может быть чем-то запутанным. Они подходят для использования, JSLint просто прогнозирует его мнение.

Ответ 2

Если у меня есть противоположное предложение...?

Пожалуйста, используйте операции increment (++) и decment (-), когда сможете. Гораздо проще. (И то, что они там для.)

Ответ 3

Единственный раз, когда я видел, что эти операторы обескуражены, находилось в Дуглас Крокфорд JavaScript: The Good Parts.

Цитата из приложения "Плохие детали":

Операторы приращения и декремента позволяют писать в чрезвычайно сложном стиле. В таких языках, как C, они позволяют писать однострочные, которые могут выполнять строковые копии:

for (p = src, q = dest; !*p; p++, q++) *q = *p;

Они также поощряют стиль программирования, который, как оказалось, безрассуден. Большинство ошибок переполнения буфера, которые создавали ужасные уязвимости безопасности, были вызваны таким кодом.

В моей собственной практике я заметил, что когда я использовал ++ и --,, мой код имел тенденцию быть слишком тугим, слишком загадочным. Поэтому, в качестве дисциплины, я больше не использую их. Я думаю, что в результате мой стиль кодирования стал более ясным.

Кроме того, цитируя JSLint документацию (инструмент качества кода, который он написал):

Известно, что операторы ++ (increment) и -- (декременты) вносят вклад в плохой код, поощряя чрезмерную хитрость. Они уступают только ошибочной архитектуре, позволяя вирусам и другим угрозам безопасности. Существует опция plusplus, которая запрещает использование этих операторов.

Он действительно не любит этих операторов... Но давай! Я думаю, что мы все еще можем использовать операторы ++ и -- без написания загадочного кода. Я использую их, и они мне нравятся. Каждый использует их.

Обратите внимание, что хотя JSLint имеет возможность запретить эти операторы, эта опция по умолчанию не включена.

Ответ 4

Причина, по которой Crockford et al. препятствует использованию ++/-- в том, что они вводят побочные эффекты. Практически нет причин использовать i+=1; вместо i++;, потому что оба являются одинарными операторами, но есть множество причин, по которым оператор делает только одно, а ++ позволяет легко нарушить это правило.

Отказ от использования ++ означает, что нам не нужно держать различие между i++ и ++i в наших головах. Это означает, что мы с меньшей вероятностью будем пытаться использовать их умными, но путаными способами. Хорошая практика не использовать их, imo, по этим причинам.

Ответ 5

Единственная причина, по которой я могу думать, заключается в том, что ваш Javascript, скорее всего, будет отредактирован идиотом, чем любой другой код, который вы пишете (html??).

Итак, для noob,

x=x+1 ;

более читабельна, чем

x++;

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

Ответ 6

Использование ++/-- может ограничить параметры js minification, поскольку их значение очень чувствительно к пробелу. В зависимости от minifier он может даже ввести ошибки в рабочий код. Крокфорд объясняет (в разделе "Предостережение" ) здесь.

Ответ 7

Единственная веская причина, о которой я могу думать, - это ясность. Вам не нужно беспокоиться о следующей ситуации:

var result = ++i;

Или:

var result = i++;

Ответ 8

использовать ++, является стандартным и иметь хорошую ситуацию с тем, чтобы быть там.