В чем шутка: if (5==count)?
Это не шутка. Чтобы случайно не написать (5 = count).
Чтобы не попутать (count == 5) и (count = 5 ибо (5 = count) — недопустимая конструкция.
Это чтобы не писать -Wparentheses -Werror.
Как от этого защититься? Средством проверки стиля?
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Защищаются от проблемы обычно перед ее возникновением, а не после
А если кто-нибудь всё-таки напишет "if (count = 5)", то что?будет ошибка компиляции, а что?
Как от этого защититься? Средством проверки стиля?
А если кто-нибудь всё-таки напишет "if (count = 5)", то что?Ну это не ко мне, а к тем кто так пишет.
Как от этого защититься? Средством проверки стиля?
По мне так приучить себя к "==" не сложнее чем к "5 ==".
У меня gcc -Wall выдает такое предупреждение: warning: suggest parentheses around assignment used as truth value [-Wparentheses]. Вот вам и проверка стиля.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
> По мне так приучить себя к "==" не сложнее чем к "5 ==".
Я всё-таки думаю, что те, кто так пишет, не смогут ответить на такой вопрос.
Я до сих пор не могу понять, что мешает любителям этого стиля заметить ошибку,
написав "if (count = 5)", что не срабатывает при обычном написании "if (count == 5)".
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."
(пренебрежём тем, что "count" уже выполняет другую операцию).
---
"Йоды магистра речи тайна раскрыта..."
Средством проверки стиля?обычно да.
При применении этого стиля таким средством являются глаза: заметить и исправить все count == 5 (и count = 5) на 5 == count много проще, чем заметить и исправить count = 5 на count == 5
По мне так приучить себя к "==" не сложнее чем к "5 ==".Основная проблема не в привычке писать правильно, а в затрудненности выделения опечаток (когда по тем или иным причинам в результате в текстве оказалось count = 5 вместо count == 5 особенно если параллельно работаешь на нескольких языках, в одном из которых сравнение делается через =
ps
как пример плохо выявляемых опечаток из практики: 4 человека минут 10 втыкали почему оно не работает так как хочется, в рамках, конечно значительного куска кода.
long x = 10 * 000 * 000;
> заметить и исправить все count == 5 (и count = 5) на 5 == count много проще,
> чем заметить и исправить count = 5 на count == 5
"Чем грузины," да.
Как часто ты встречал эту ошибку?
Как часто эта ошибка не сопровождалась диагностикой компилятора?
Ничего, что иногда код должен быть именно "count = 5"?
Как твои инструменты отлавливают это?
---
"Университет развивает все способности, в том числе и глупость."
Как часто ты встречал эту ошибку?в чем вешать?
Как часто эта ошибка не сопровождалась диагностикой компилятора?опять же в каких единицах и при каких условиях измерять?
Полноценная развернутая и настроенная система сборки вылавливает такие опечатки на ура, а какой-нибудь недокомпилятор(а уж тем более интерпретор) для какой-нибудь экзотики - и не такое съест и не подавится.
Ничего, что иногда код должен быть именно "count = 5"?Во-первых, это означает, что раз такой код понадобился, то автоматический оптимизатор кода совсем плох или вообще отсутствует.
Во-вторых, при необходимости это обходится через комментарий для человека или мета-пометку для анализатора
Как твои инструменты отлавливают это?выдают предупреждение
Но, если код существует в многоязычной среде и часто правится не-специализированными редакторами, я готов идти на такие уступки.
> такие опечатки на ура, а какой-нибудь недокомпилятор
Названия.
> (а уж тем более интерпретор) для какой-нибудь экзотики - и не такое съест и не подавится.
Судя по заголовку, эта экзотика вполне определённого рода.
Кроме того, кому-кому, а вот тебе точно не стоит привлекать сюда "экзотику,"
потому что любой человек, знакомый с "экзотикой" тебе быстро расскажет
про разницу между типами "int" и "int ref".
>> Ничего, что иногда код должен быть именно "count = 5"?
> Во-первых, это означает, что раз такой код понадобился,
> то автоматический оптимизатор кода совсем плох или вообще отсутствует.
Есть такое понятие, "идиома." Так вот, идиома открытия файла в упоминаемых языках
"if fd = open(path, flags != -1)", а не раздельные операторы.
Эта идиома, в частности, подчёркивает, что ошибочная ситуация обработана,
а не отложена на потом.
> Во-вторых, при необходимости это обходится через комментарий
> для человека или мета-пометку для анализатора
Пример кода можешь привести, или это голословное утверждение?
>> Как твои инструменты отлавливают это?
> выдают предупреждение
То есть, они всё равно умеют определять случаи "if (count = 5)",
тогда какого чёрта ты настаиваешь на написании "if (5 == count)"?
Чтобы было?
---
"Университет развивает все способности, в том числе и глупость."
тогда какого чёрта ты настаиваешь на написании "if (5 == count)"?Это утверждение ты домыслил за меня.
Я лишь обозначил при каких условиях это имеет смысл, и ты эти условия не прочитал (либо не понял)
я тоже считаю, что yoda conditions - это глупость и прошлый века что не так? Общее количество символов сохраняется, читаемость сохраняется, при этом избегается одна неприятная ошибка, которую можно найти и другими способами. Но если можно забесплатно сделать не хуже, чем было, то почему нет?
> читаемость сохраняется,
Не сохраняется. Про порядок слов в предложении (разницу между SVO и OVS)
можешь прочитать хоть в википедии.
> при этом избегается одна неприятная ошибка,
Не избегается, так как "count == 5" и "5 == count" полностью эквивалентны.
> которую можно найти и другими способами.
> Но если можно забесплатно сделать не хуже, чем было, то почему нет?
1. Хуже.
2. Небесплатно.
---
"Университет развивает все способности, в том числе и глупость."
а что не так?Конфликтует немного с другими конструкциями: в которых сначала идет основа (Что? а потом вспомогательные данные (С чем?).
В данном случае, переменная является основой (потому что она обычно присутствует в соседних строчках а константа - вспомогательные данные
Конфликтует немного с другими конструкциями: в которых сначала идет основа (Что? а потом вспомогательные данные (С чем?).начальный уровень хаскеля кладёт конец всяким предрассудкам о порядке слов в предложении и прочем. Программист обретает навык двунаправленного чтения.
Мне тут могут возразить, что не все этот хаскель видели и пользовались им. Но самая суть проблема (=) и (==) в том, что человек имеет шанс автоматически перенести привычки одного активно используемого языка программирования в другой. А проблема эта как раз актуальна для тех, кто знает много языков
Программист обретает навык двунаправленного чтения.Да, умеет так читать, но это достаточно не оптимальный способ чтения кода.
При эффективном способе код читается последовательно, и стиль написания кода (и языковые конструкции) обязан способствовать использованию этого способа чтения.
Твой хаскель только подчёркивает этот порядок: "f x" --- прямой, а "x |> f" --- обратный,
почему и требуется соответствующий оператор.
---
"Тому, кто не доверяет себе, разумнее всего молчать."
При эффективном способе код читается последовательно,код читается не последовательно, а в порядке исполнения
о, я так и знал что есть люди ничего кроме сишечки не представляющие.
Чтобы случайно не написать (5 = count).много читал про этот "паттерн", но так и не смог на него перестроиться. лично я считаю, что проблемы "if (count = 5)" преувеличены. они так редко встречаются, что переходить на "if (5 == count)" нет смысла. то есть средства не оправдывают цели.
согласен. плюс 5 == count просто выглядит уебищно
перенести привычки одного активно используемого языка программирования в другойа это хорошо что ли? Например, Крыс, скорее всего, на Java, поэтому ему не понятно нахера это извращение.
Это пусть и маленький, но всё же пример отрицательного влияния использования нескольких языков. С полноценным переключением между языками голова не справляется, поэтому давайте выдумывать межязыковые стили?
плюс можно заставить ругаться на тождественно ложные / истинные условия.
false-positive будет огромный, но баги находить помогает.
настоящий программист на фортране пишет на фортране на любом языке программирования
Например, Крыс, скорее всего, на Java, поэтому ему не понятно нахера это извращение.
В яве похожая идиома есть:
if (var.equals( "somestr") )- потенциальный NullPointerException
if ( "somestr".equals(var) )- ok
никак понять не могуОчередная нотация о хорошем коде.
Спойлер-то в подписи зачем?
count == 5 && printf("5 count equal is to.\n");
Тогда от пропущенного "равно" операций порядок оберегает нас.
конечно, это будет верно, но смысл?
Же семантику опечатка изменяет.
такое ещё сложнее отловить
Выработает хотя бы привычку ставить правильные знаки.
Я, во всяком случае, не уверен, что сходу решусь выпить столько, чтобы перепутать (= count 5) и (set! count 5).
Это превышает человеческие возможности. Какой-то язык для сверхчеловеков
Для атлантов!
Чорная. Её пьёшь и она тебя растворяет и распыляет твоё ДНК по морям и океанам.
Уапще хороший плюсер не напишет x=5 вместо x==5, и надо сказать что меня раз в неделю C# ругает на том, что напишу = вместо ==, и за это ему благодарен... в С++ место только увлеченным
твоё ДНКВ истории еще не было более неуместного употребления буквы "ё".
(Не считая ежедневного "твоё день рожденье", конечно.)
Позволяет решить нерешаемую методом из заголовка проблему "if(count EQ schmount)".
Например, if (длинный-длинный вызов и в конце != 0)
Если так писать, то хз, будет ли там в конце сравнение или if будет на результат функции смотреть. А если написать
if (0 != длинный-длинный-вызов то условие сразу понятно.
Мне удобнее.
Оставить комментарий
stm6692945
Много где уже вижуникак понять не могу