Сэкономили на нормальной IDE
А разве IDE такое отслеживает? мне казалось это компилятора задача
Тут нет никаких ошибок с точки зрения компилятора. А с точки зрения IDE может возникнуть замечание, что странное место для присвоения, да и то не факт
Нормальный компилятор выдаст ворнинг. Так что не игнорируйте предупреждения, ребята =)
Рекомендую ставить -Werror в релизе ;)
Рекомендую ставить -Werror в релизе ;)
Но перед этим
-Wall -Wextra и ещё несколько ключей, которые не входят в all и extra
да и -Werror= и в дебаге не помешает
-Wall -Wextra и ещё несколько ключей, которые не входят в all и extra
да и -Werror= и в дебаге не помешает
-pedantic
-Werror в дебаге порой мешает - то там "лишняя" переменная, то еще что, что тебе скоро понадобится.
-Wall, -Wextra, -pedantic и так далее для каждого языка различны, но чем больше, тем лучше! =)
-Wall, -Wextra, -pedantic и так далее для каждого языка различны, но чем больше, тем лучше! =)
По-моему, параметр -pedantic аналогичен картинке ниже.
Я не говорю делать Werror для всех ворнингов в дебаге, а бить по рукам для особо извращённых случаев.
Например, всегда использую -Werror=return-type -Werror=delete-incomplete, тк считаю подобные косяки слишком опасны, чтобы быть просто ворнингами.
Например, всегда использую -Werror=return-type -Werror=delete-incomplete, тк считаю подобные косяки слишком опасны, чтобы быть просто ворнингами.
Мелочи IDE может отслеживать. Вообще есть и анализаторы всякие, не входящие в IDE для таких вещей.
На здравом смысле сэкономили. Булевские переменные сравнивать с true или false бессмысленно.
Побуду кэпом: в if сэкономили на одном знаке равенства и происходит не сравнивание, а присваивание.
if (someBooleanVar == true) => if (someBooleanVar) - вот что имел в виду комментатор выше. И совершенно прав в этом.
Я в курсе. Ошибочка довольно распространённая. Но если бы не пытались сравнить bool с константой, то такого бы не случилось и разрабы могли бы продолжить быдлокодить.
Скорее на кодстайле, все-таки не зря правилом хорошего тона является написание констант слева в условных операторах. Тогда не то что компилятор, любая мало-мальски нормальная ИДЕ начнет очень громко ругаться.
Косипоры)
А ты у нас не программист?
Или, может - не мамкин?
Или, может - не мамкин?
Лучше в условиях не ставить "== (true/false)"
Хорошо, а как тогда сравнить переменные между собой без == ?
Так то сравнивание переменных. А в данном случаи компилятор достаточно умен чтоб самому узнать единственная переменная тру или фолс.
Как это делают индусы, разумеется:
if (a.toString().length < 5) ...
if (a.toString().length < 5) ...
Извини, не знаю я индусский, чтобы объяснить, что сравниваются переменные, а не переменная и константа. Хотел сумничать, та написал бы уж "if (a - b) else doIt();", что равнозначно " if (a == b) doIt();".
Ты нервный. Это от процедурного программирования. Сравнивай так:
if (a.compare(b)) ...
А в общем случае "a - b" недопустимо, поскольку для некоторых типов переменных операция +/- не определена.
if (a.compare(b)) ...
А в общем случае "a - b" недопустимо, поскольку для некоторых типов переменных операция +/- не определена.
Указатели через приведение типов замечательно вычитаются. Вещественные и целочисленные типы умеют в отрицание. Нельзя сравнить только массивы данных (к которым относятся строки и объекты), но это очевидно. Я что-то пропустил?
Строки и объекты нынче встречаются чаще, чем что-либо еще. Но у меня вопрос - ты всерьез собрался сравнивать два вещественных числа через == или сравниваемую с нулем разницу?
Я написал true/false в скобках для конкретизации: если функция или переменная имеют (возвращают) значение true или false, лучше не писать "==" вообще.
Для данного конкретного случая и подобных - согласен.
Истину говорю вам, мир погубит быдлокод.
Но ведь можно просто
if isCrazyMurderingRobot
kill(humans);
if isCrazyMurderingRobot
kill(humans);
К else+; и без {}/begin..end отдельная претензия. Зависит от языка.
Не-не-не надо обязательно писать именно так, а еще вот так while(1==1){...} . Нас так в универе учили(с)
З.Ы. это сарказм если че
З.Ы. это сарказм если че
А можно в стиле perl:
isCrazyMurderingRobot && kill(humans);
isCrazyMurderingRobot && kill(humans);
javascript тоже такое сжуёт
Функция kill есть? Есть. Значит все-таки запрограммировали на это.
А вообще так и надо тем, кто смешивает CamelCase и snake_case
А вообще так и надо тем, кто смешивает CamelCase и snake_case
Потому что правильно писать:
if(true == isCrazyMurderingRobot)
Вот тогда IDE точно скажет что-то не так
if(true == isCrazyMurderingRobot)
Вот тогда IDE точно скажет что-то не так
Тогда и компилятор заматерится. К сожалению, данный метод работает только при наличии констант или результат функции в условии. С переменными всё равно можно ошибиться.
Чтобы не ошибиться, нужно просто не доверять программирование таких роботов юниорам. Опытные разработчики знают о всех потенциально опасных местах и несколько раз их перепроверяют чисто по привычке.
У опытных разработчиков имеются наборы тестов, которые позволяют частично исключить логические ошибки. Но алгоритмические всё равно останутся незамеченными и всплывут уже при использовании ПО.
Он все правильно написал, есть вообще правило: КОНСТАНТА при сравнении должна быть слева. А всякие идиоты ебашат справа.
Этому есть одно простое объяснение, если у вас константа слева и вы поставите '=' вместо '=='. Что компилируемый, что интерпретируемый язык даже не запустят программу.
if(true = isCrazyMurderingRobot)
Этому есть одно простое объяснение, если у вас константа слева и вы поставите '=' вместо '=='. Что компилируемый, что интерпретируемый язык даже не запустят программу.
if(true = isCrazyMurderingRobot)
Не все читали умные книги про совершенный код.
Спасибо магистр Йода, но в языках с нормальными компиляторами (а не как JS/PHP), подобные извращения не нужны. Компилятор выдает предупреждение, этого достаточно.
зажрались. компилятор выдаст.
совсем так перестанете головой думать
совсем так перестанете головой думать
Чем меньше держишь в голове фигни, которую можно в голове не держать, тем больше держишь в голове того, что действительно важно. Ресурсы мозга весьма ограниченны.
Посадить бы таких умных писать программы вначале в блокнот (написал с маленькой буквы специально, я не про программу Блокнот).
отсутствие знаний про "эту фигня" в итоге и приводит к тому, что оч много "специалистов" вообще не представляют как работают микропроцессорные системы. зато херачат мегабайты кода да еще без комментариев.
а потом все дружно удивляются, чего это 64 процессорный sun загружен под жвах.
а потом все дружно удивляются, чего это 64 процессорный sun загружен под жвах.
На микропроцессорный уровень реально пофиг сейчас, почти везде.
Но вот как нафигачат O(n^2) там, где не надо, так хоть вешайся =)
Но вот как нафигачат O(n^2) там, где не надо, так хоть вешайся =)
Гм, а вы товарищ рисковый. А если на сборку уходит несколько часов? Будем ждать пока сборка отвалится? А еще при этом всем будете сравнивать переменную с результатом функции и случайно поставите только один знак равенства? Это и компилятор и иде пропустят как валидный код и подвох можно будет заметить только во время тестирования(и будет еще хорошо если автотестами все покрыто). А вот если правильную очередность соблюдать, то можно здорово упростить жизнь себе и своим коллегам.
Ну опять таки, компиляция занимает сколько? Пару десятков миллисекунд. А теперь возвращаемся к ситуации когда на компиляцию уходит гораздо больше времени.
Если компиляция занимает много времени, то это отдельная проблема с которой надо бороться.
У меня другой вопрос: почему вообще добавлять такую функцию? И почему не добавить идентификацию своих и чужих, если это военный робот? А 3 закона робототехники? Да ну нафиг!
А писали бы на шарпах, такой фигни не былоб.
Ассемблер рулит. На нём так вообще невозможно ошибиться.
асемблер? серьезно? да там яйца можно себе отстрелить
ну так..точечно да. хорошо использовать (для узких мест).
для клиентского ПО каких нибудь учетных систем он нафиг не нужен.
остаются спецпроцессоры, да критичный по ресурсам и времени функционал.
для клиентского ПО каких нибудь учетных систем он нафиг не нужен.
остаются спецпроцессоры, да критичный по ресурсам и времени функционал.
Я просто иначе написал фразу unkuse.
Можно ещё так: "А писали бы на асме, такой фигни не былоб" (стилистика сохранена).
А вообще, MenuetOS и ПО к ней.
Можно ещё так: "А писали бы на асме, такой фигни не былоб" (стилистика сохранена).
А вообще, MenuetOS и ПО к ней.
ну там вообще все по другому. пришлось тут с год назад вспоминать. аж слышно было как мозги заскрипели.
блять и никто не удивился а нафиг вообще писать такое в код роботам? вот это вот killhumans? без него никак нельзя было?
ну не писать же код выключения закона Ома. Вот тогда будет пиздец!
if (isGood === true) {
.... beNiceTo(humans);
} else if (isGood === false) {
.... beBadTo(humans);
} else {
.... kill(humans);
}
.... beNiceTo(humans);
} else if (isGood === false) {
.... beBadTo(humans);
} else {
.... kill(humans);
}
Кстати, в Perl возможно дойдет до kill ;-)
В javascript тоже дойдёт, без проблем :)
Хватит умничать, во всех языках с duck typing дойдет :)
▶ typeof(isGood)
◀ "string"
◀ "string"
Это ещё что, может быть и "Object", потому распарсилось из XML ответа как null :)
еще не забудь про область видимости, если оно пришло через асинхронный запрос и выполнилось в виртуальной машине.
А я нихера не понял :(
Это чисто программистские шуточки) не обращай внимание
Все таки роботы не от этого взбунтовались. Скорее от такого
http://govnokod.ru/3032
http://govnokod.ru/3032
сегодня определенно вечер приятных воспоминаний про дедала и fvmas
Чесно, слово ))
Срачь и пипискомерство в комментариях, доставляет больше самой картинки.
Срачь и пипискомерство в комментариях, доставляет больше самой картинки.
Чтобы написать коммент, необходимо залогиниться