Не рекомендуется ли использовать оператор увеличения в javascript?

#javascript

#javascript

Вопрос:

Я видел код, подобный следующему, в некоторых библиотеках JS:

 var i;
for (i = 20; i >= 0; i -= 1) 
{
}
  

Интересно, почему они решили уменьшить i таким образом. Есть ли какие-то проблемы с использованием and -- в javascript?

Комментарии:

1. Я очень сомневаюсь, что есть проблема с операторами или —. Эти операторы были с нами в течение длительного времени.

Ответ №1:

Операторы увеличения и уменьшения отлично работают в JavaScript. Многие люди не используют их, потому что Крокфорд рекомендует не использовать их в своей книге JavaScript: The Good Parts . Мне вообще нравится Крокфорд, но я чувствую, что эта конкретная рекомендация немного драконовская. Я еще не видел ни одной убедительной ситуации или доказательств, свидетельствующих о том, что они вредны.

Комментарии:

1. 1 — «Я действительно чувствую, что эта рекомендация немного драконовская» … как и многие рекомендации Крокфорда.

2. 1. Если вы знаете, что они делают и как они работают, тогда я не понимаю, почему в большинстве случаев возникает проблема с их использованием.

Ответ №2:

Дуглас Крокфорд, он же крестный отец JavaScript, не одобряет .

Запутанные плюсы и минусы

Будьте осторожны, чтобы не следовать с или . Этот шаблон может сбивать с толку. Вставьте скобки между ними, чтобы прояснить ваше намерение.

 total = subtotal    myInput.value;
  

лучше записать как

 total = subtotal   ( myInput.value);
  

чтобы не было неправильно истолковано как .

Лично — или вполне подходит для цикла for, поскольку его значение очень ясно. Я склонен следовать большинству рекомендаций Крокфорда, хотя, как правило, это основа соглашений JS.

Подробнее здесь .

Комментарии:

1. Использование таким образом обычно заключается в преобразовании строки в число. Я бы сказал, что использование само по себе не ясно.

2. -1: речь идет не об операторе » «, а об одном » «, за которым следует либо другой » «, либо » «. Смотрите ваши примеры.

3. Пример не указан, но они по-прежнему ссылаются на ту же концепцию кода, которая не вводит в заблуждение и не вводит в заблуждение. К сожалению, единственный известный мне пример — это видео с презентацией, которую дал Крокфорд. -1 вам, сэр, за понимание концепции.

Ответ №3:

Я думаю, что циклические операторы увеличения и уменьшения на самом деле не вредны (из того, что я видел), но вы не должны использовать его вне циклов.

Ответ №4:

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

Чего я здесь не вижу, и я добавлю, так это цитаты Дугласа Крокфорда из одной из его лекций по JavaScript:

Например, оператор , это было добавлено для B для выполнения точечной арифметики. С тех пор мы определили, что точечная арифметика вредна, поэтому мы больше не делаем этого. Современные языки не поддерживают точечную арифметику. Последним популярным языком, в котором была точечная арифметика, был C . Язык настолько плох, что был назван в честь этого оператора. Но оператор отказался умирать. Он по-прежнему присутствует во всех наших языках, хотя он нам больше не нужен для увеличения указателей.

Теперь мы используем его для добавления единицы к переменным. Что совершенно не нужно. Но мы это делаем. К сожалению, это приводит к стилю программирования, в котором вы пытаетесь писать однострочники. В котором вы пытаетесь взять целую кучу материала и попытаться сжать его в одну строку. Это приводит к действительно плохому коду. Материал, который очень сложно поддерживать, очень сложно исправить. Мы видели ошибки безопасности, переполнение буфера и тому подобное. Этот оператор всегда связан с такого рода ошибками безопасности. h

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

С этого момента я сказал больше не . Это =1. Я могу расслабиться. Это просто. Теперь я могу просто писать хорошие программы. Еда вкуснее. Все отлично. Какое-то время я думал, что это только я. Но теперь я рекомендую всем = 1 каждый раз. =1 это здорово. Так намного лучше.

Я все время слышу от людей, что я хочу иметь возможность писать x , потому что это означает то же самое, вместо того, чтобы идти … (имитирует ввод нескольких нажатий клавиш) Я не могу идти … (имитирует ввод нескольких нажатий клавиш) У меня нет такого времени! За исключением того, что время ввода не имеет значения. Это совершенно не имеет значения. Мы не тратим время на ввод текста.Более того, это x, что означает примерно то же самое, что и x =1.

Каждый раз, когда я вижу, что кто-то пишет x в позиции увеличения, я должен спросить, понимает ли это двоеточие разницу между предварительной фиксацией и последующей фиксацией. Это означает, что я должен посмотреть на каждый в этой программе и спросить, правильно ли он это понял. Он правильно понял это? Потому что это небольшая дислексическая вещь, которую действительно трудно определить, когда вы поменяли их местами. Это приводит к отключению из-за одной ошибки, которая отключается только на мгновение. Но этого достаточно, чтобы вызвать ошибку. Отлаживать такие вещи действительно сложно.

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

Я переделывал некоторый код и увидел x; x; Так что там происходит? Возможно, это была ошибка копирования и вставки. За исключением того, что код, похоже, работал. Более вероятно, что произошло то, что кто-то выполнил x, а затем кто-то еще заметил, что здесь есть одна проблема. Итак, они сделали это снова. Если бы в исходном коде было указано =1, то очевидным решением было бы =2.

Возникает вопрос, почему мы думаем, что нам нужен совершенно другой синтаксис для добавления единицы к переменной, чем для любого другого значения? Какой в этом смысл? Ответ в том, что это не имеет никакого смысла.У нас есть эмоциональная привязанность к плохой грамматике в наших языках, которая заставляет нас чувствовать, что вот кто я. Это часть того, кто я есть. Если вы заберете у меня , кто я? Что осталось? (хнычет) Бесплатно, приняв более строгий стиль, можно автоматически избежать многих классов ошибок.

Я согласен почти со всем этим (особенно с ключевыми идеями, которые я выделил жирным шрифтом) и не вижу смысла использовать вместо = 1 где-либо.