Это одна из вещей, которые я больше всего ненавижу, когда вижу в чужом коде. Я знаю, что это значит и почему некоторые люди делают это таким образом («что, если я случайно вместо этого поставлю« = »?»). Для меня это очень похоже на то, когда ребенок спускается по лестнице, считая шаги вслух.
Во всяком случае, вот мои аргументы против этого:
- Это нарушает естественный поток чтения программного кода. Мы, люди, говорим «если значение равно нулю», а не «если значение равно нулю».
- Современные компиляторы предупреждают вас, когда у вас есть назначение в вашем состоянии, или на самом деле, если ваше условие состоит только из этого назначения, что, да, в любом случае выглядит подозрительно
- Вы не должны забывать ставить double '=', когда вы сравниваете значения, если вы программист. Вы можете также забыть поставить "!" при проверке неравенства.
coding-style
mojuba
источник
источник
0 == value
но не помню, чтобы писать==
?? Я имею в виду, что если вы думаете об этом, почему бы не написать это правильно для начала.Ответы:
Ах да, "Йода условные" ("Если значение равно нулю, выполнить этот код, вы должны!"). Я всегда указываю всем, кто утверждает, что они «лучше» в таких инструментах, как lint (1). Эта конкретная проблема была решена с конца 70-х годов. Большинство современных языков даже не скомпилируют выражение типа
if(x = 10)
, так как они отказываются приводить результат присваивания логическому значению.Как уже говорили другие, это, конечно, не проблема, но это вызывает небольшой когнитивный диссонанс.
источник
if(!value)
.if (0 == x)
?Это неприятно, потому что оно облагает небольшим, но заметным умственным налогом.
Люди читают слева направо практически на всех языках программирования (и на большинстве естественных языков).
Если я вижу
123 == x
, то, как я мысленно разбираю это:123
- И что? неполная информация==
- ну, 123 - это 123, зачем это проверять ...x
- Хорошо, так вот что нас беспокоит. Только теперь у меня есть контекст.123
и почему х сравнивается с этим.Когда я вижу
x == 123
умственный анализ:x
- Предоставляет контекст, я знаю, что это за условие. Я могу игнорировать все остальное. Основываясь на предыдущем потоке, у меня есть хорошая идея, почему и что будет впереди (и удивлюсь, если это не так).==
- Я так и думал.123
- Ага.Нарушение небольшое (в простом примере), но я всегда это замечаю.
Если вы хотите привлечь к себе внимание, лучше поставить значение первым , например
if (LAUNCH_NUKES == cmd)
. Обычно это не намерение.источник
=
или==
до,123
илиx
, и в итоге даже не потрудился перевести код на английский в моей голове.Вредно? Нет, это работает в любом случае.
Плохая практика? Дискуссионный, в лучшем случае. Это простое защитное программирование.
Стоит потерять сон? Неа.
источник
Это в основном фламбайт.
Нет, это не приносит больше вреда, чем пользы. Просто.
Больше слов?
Аргумент компилятора? Хм, может быть, не слишком доверяйте компилятору, чтобы спасти себя от себя.
«Вы не должны забывать» - хорошо Дух - нет, конечно , вы не должны тем , что я устал, я кодирования весь день я должен был использовать два разных языка , а иногда, просто иногда, будучи человеческим я делаю ошибка.
Смысл такого рода поведения в том, что он оборонительный, его здесь нет, потому что вы ожидаете ошибок больше, чем у вас есть страховка, потому что вы ожидаете крушения ... но если вы делаете то, что приятно, чтобы вас покрывали.
Трудно читать? Вы жалуетесь, что приличный программист должен иметь == аппаратно (что делает все виды ошибочных предположений), но что тот же самый приличный программист не может прочитать 0 == значение ??
Не причиняет вреда, имеет потенциальные выгоды, глупый вопрос, пусть другие делают это, если хотят, и идут дальше.
источник
Я бы не назвал это вредом, но это противно. Так что нет, я бы так не сказал.
источник
Я никогда не чувствовал, что весь "что если я забуду =?" когда-либо действительно держал большой вес. Да, вы можете сделать опечатку, но мы все делаем опечатки, кажется глупым менять весь ваш стиль кодирования, потому что вы боитесь ошибиться. Почему бы не сделать все ваши переменные и функции строчными, без знаков препинания, потому что вы можете забыть что-то написать с заглавной буквы или забыть подчеркивание в один прекрасный день?
источник
Некоторые люди используют это, чтобы прояснить, что именно делает условное выражение. Например:
Способ 1:
Способ 2:
Некоторые люди считают, что второй пример является более лаконичным, или обратные аргументы иллюстрируют смысл теста (условного) до самого теста.
На самом деле, я не против в любом случае. У меня есть свои любимые мысли о стиле, и самая большая из них - непоследовательность. Так что, делайте то же самое, последовательно, и я не буду возражать против чтения вашего кода.
Смешайте это до такой степени, что это выглядит так, как будто шесть разных людей со своим собственным отличительным стилем работали над этим одновременно, я немного раздражен.
источник
Для меня это просто кондиционирование. Как человек, который выучил (в 90-х годах) C и C ++, я привык к этому и до сих пор использую его, хотя причины этого не оправданы.
Как только вы «обусловлены» смотреть на «постоянную» с левой стороны, это становится второй натурой.
Я также использую его только для эквивалентности (или отрицательной эквивалентности), а не для большей / меньшей чем.
Я полностью согласен с ответом Вонко.
источник
Единственный случай, когда я нахожу это полезным, это то, что переменная часть if довольно длинная, и просмотр значений облегчает чтение кода. У точечных языков пространства имен есть лучшие примеры этого.
Например, что-то, над чем я работал с единым входом, было в ситуации, когда вы могли бы иметь два одновременных сеанса, если бы произошла ошибка определенного типа и была исправлена определенным образом, поэтому я должен добавить для нее обработчик, который был бы внутри, если это выглядело что-то вроде этого:
if (2 <= application.httpcontext.current.session["thenameofmysessiontoken"].items.count())
По общему признанию в этом примере есть другие способы сделать это, но это был бы случай, когда номер номер версии потенциально более читабелен.
источник
И все же ошибки случаются. И иногда вам нужно присвоение в операторе цикла, где вы могли бы иначе проверить равенство, или, по крайней мере, это стандартная практика для его использования.
Я немного придерживаюсь этого. Совет, которому я следовал (возможно, из Code Complete), состоит в том, чтобы оставить при сравнении то, что должно быть меньшим значением слева. Я обсуждал это с коллегой ранее, и он подумал, что это было сумасшествие, но я очень привык к этому.
Так что я бы сказал:
Но я бы также сказал:
Равенство, которое я постараюсь проверить с помощью переменной слева, просто более читабельно.
источник
if(y > x)
все время. Если толькоy
это не константа.