Здравствуйте, Alekzander, Вы писали:
A>Сразу оговорюсь, что вопрос больше не про философию программирования, а про психологию программистов.
A>Когда я давным-давно впервые увидел в коде сабж, то решил, что автор издевается (особенно без йода-сравнений).
Я, кстати, пишу в йода-стайле при возможности — если не заворачивают на ревью или линтер:
if (false == a)
намного более заметно, чем с восклицательным знаком — будучи уставшим, я не вижу восклицательных знаков — похоже возраст уже, зрение садится.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Все проще — у меня начинающие так пытаются писать, пока я им по рукам не дам. Ф>>А зачем ты этим занимаешься? LVV>Чем именно ?
Следишь за такими вещами и напрягаешь себя и других этой фигнёй?
Всё сказанное выше — личное мнение, если не указано обратное.
LVV>>>>Все проще — у меня начинающие так пытаются писать, пока я им по рукам не дам. Ф>>>А зачем ты этим занимаешься? LVV>>Чем именно ? Ф>Следишь за такими вещами и напрягаешь себя и других этой фигнёй?
Дык это же основная задача препода — постараться сделать человека из примата...
Только отвернешься — они снова на пальму лезут...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Все проще — у меня начинающие так пытаются писать, пока я им по рукам не дам. LVV>После пи*лей — сразу как-то все понимают и начинают писать нормально
Здравствуйте, Alekzander, Вы писали:
A>Сразу оговорюсь, что вопрос больше не про философию программирования, а про психологию программистов.
Моя теория что они просто заняты делом и не отвлекаются на синтаксический оверхед и прочую ерунду. Как в тот момент времени логичнее казалось так и написали.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Alekzander, Вы писали: A>>Это хуже йодинга: смысл перестановка меняет незначительно лишь, а инверсия страшная тут. S>Смысл меняется, и очень-очень сильно. true обычно равно 0xFFFFFFFF.
Эээ...
присоединяюсь к вопросу — это в каких языках?
Я такое помню только в Forth и классических Бейсиках. Ну и в некоторых форматах данных (ASN.1 CER, DER требуют один байт 0xFF). У остальных почти у всех — единица. Это же у большинства процессоров, где они создают булевские значения (setxx у x86, slt(i)(u) у RISC-V, и т.п.).
Контекст ассемблера SIMD тоже есть, но он опять же особый.
S>В итоге, если в a попадает 42, то if(a == true) пройдёт мимо, а if(a != false) зайдёт внутрь. Как и if(a).
Оптимизация и правила конверсии могут это вывернуть наизнанку. Например, ==true может превратиться в !=0 на уровне битового представления. А могут и не вывернуть.
S>Так что, возможно пишет if(a == true) вовсе не идиот. S>Может быть, a имеет тип "недоперечисления", которое организовано так, что -1 = started; 0 = stopped; 1 = starting; 2 = stopping; 16 = error. Для совместимости с совсем древним кодом, который написан для времён с двумя статусами сервиса, которые он проверял через if(!service->status). S>А теперь нам нужен код, который убеждается, что сервис именно что запущен.
Тогда и надо писать ==1, а не ==true.
Ну, я в Питоне тоже иногда делал tri-state (None, False, True), но это была диверсия, от которой потом избавлялись при подходящем случае.
A>>Если тип не bool, они в таких случаях пишут каст плюс == true. S>Даже если тип bool, не всегда он сформирован честным образом из констант true, false, и булевых операций. Даже в дотнете я налетал (правда, из-за бага в моём же unsafe коде) на то, что булевая логика на SIMD дала не true, а non-false результат. В итоге, код с if(a) прекрасно работал, а вот тесты, которые сравнивали вычисленный массив булеанов с референс-значениями, фейлились.
Ну на unsafe это вы тогда сами себе учудили.
S>С другой стороны, это недостаточно каргокультно. S>По классике, нужно писать вот так: S>
Здравствуйте, netch80, Вы писали:
N>Эээ... N>присоединяюсь к вопросу — это в каких языках?
АФАИК, во всех языках CLR. Но это, собственно говоря, неважно. Если в конкретном языке/платформе true == 0x1, то нижеследующая цитата всё равно верна:
S>>В итоге, если в a попадает 42, то if(a == true) пройдёт мимо, а if(a != false) зайдёт внутрь. Как и if(a). N>Оптимизация и правила конверсии могут это вывернуть наизнанку. Например, ==true может превратиться в !=0 на уровне битового представления. А могут и не вывернуть.
Это сильно зависит от деталей спецификации. В CLR чётко написано, что истинным считается любое ненулевое значение. И даже сравнение с компайл-тайм константой true таки даёт true.
А вот сравнение рантайм-значений может не удастся: https://dotnetfiddle.net/3h20pu
N>Тогда и надо писать ==1, а не ==true.
+1 N>Ну, я в Питоне тоже иногда делал tri-state (None, False, True), но это была диверсия, от которой потом избавлялись при подходящем случае.
N>Ну на unsafe это вы тогда сами себе учудили.
Но был удивлён. N>Считаю, шутка удалась
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Alekzander, Вы писали:
A>Сразу оговорюсь, что вопрос больше не про философию программирования, а про психологию программистов.
... A>Так вот, у меня появилась гипотеза, что те, кто пишет if (service.IsStarted == true), просто слышали звон. Останавливаются на половине, пытаются изображать строгость, при этом не расписывая состояния для каждого кейса.
Если про психологию, то это просто от лени. Никто не хочет писать "лишнего". К тому же, думать — это очень энергозатратно и чаще, чем 2 раза в день практически невозможно.
Y>Мои коллеги считают, что if (!service.IsStarted) — это нечитабельно, восклицательный знак не видно красными глазками.
так пускай три восклицательных знака ставят, чтоб заметно было
Как много веселых ребят, и все делают велосипед...