- 1
if Mode = True then
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+86.6
if Mode = True then
из исходников FastReport
guest 21.12.2009 18:54 # −2
StriderMan 21.12.2009 19:06 # −4
if Mode then
zitzy 21.12.2009 21:14 # −1
guest 21.12.2009 21:50 # +7.2
If Mode = True then
<=>
If (Mode = True) = True Then
<=>
If ((Mode = True) = True) = True Then
И вопршает: когда останавливаться? не проще ли:
If Mode Then
zitzy 21.12.2009 22:01 # −2
<=>
If ((Mode = True) = True) = True Then
Вот это явный бред.
Никто же не пишет так:
a = 1 = 1 = 1 = 1;
Кому как больше нравится. Лично мне иногда удобнее писать if mode = true. Хотя да, if mode then короче. Ну от вкуса зависит. В любом случае не говнокод, а стиль программирования.
guest 21.12.2009 23:31 # −1.8
guest 22.12.2009 00:36 # −2.2
StriderMan 22.12.2009 00:44 # −1.2
Вот вам на закуску еще кусок:
if a = b then
SomeBoolean := true
else
SomeBoolean := false;
Такой код вас тоже наверное не смущает?
adli__82 17.08.2010 14:12 # 0
guest 22.12.2009 00:35 # −0.8
StriderMan 22.12.2009 00:40 # −2.2
guest 22.12.2009 15:56 # +2
guest 23.12.2009 02:08 # −1
nolka4 22.12.2009 05:32 # −3
guest 22.12.2009 09:11 # −1
nolka4 22.12.2009 09:41 # −6.2
guest 22.12.2009 17:15 # −1
guest 27.04.2010 22:53 # −1
if variable ...tralala....
Как в примере гораздо нагляднее и читабельнее.
А по поводу примеров типа
(if a= True) = True и так далее- чушь, таким образом тогда можно еще много каких конструкций в говнокодом назвать.
вот так например: "Мол, чего вы, ребята, пишете
if (() && ())
ведь можно и так:
if(() && () && 1 && 1...)
"
guest 22.12.2009 10:38 # −3
StriderMan 22.12.2009 11:40 # +1
Yozheg 22.12.2009 12:50 # +1
dmarco 22.12.2009 16:13 # 0
guest 22.12.2009 17:16 # 0
guest 25.12.2009 20:47 # +2
cyba 22.12.2009 16:23 # +4
это не минус проверки в данном случае, это минус именования объекта
здесь Mode ничего не говорит о том, что по сути он является флажком
вообще-то, куда лучше было бы назвать эту переменную IsMode - тогда было бы всё пучком без лишнего явного указания о том, что именно здесь происходит, и что с чем сравнивается
p.s. кстати, IsMode - также не совсем удачно подобранное имя. лучше что-то типа IsSpecialMode, где "Special" меняется в зависимости от контекста
StriderMan 06.01.2010 01:53 # +1
StriderMan 06.01.2010 01:54 # 0
guest 22.12.2009 18:02 # −5
guest 23.12.2009 00:01 # 0
guest 23.12.2009 00:02 # −5
guest 23.12.2009 00:03 # −2
guest 30.12.2009 12:11 # −1
guest 26.12.2009 10:30 # −1
StriderMan 06.01.2010 01:43 # +2
guest 23.12.2009 02:04 # −2
http://govnokod.ru/2304#comment11850
http://govnokod.ru/2304#comment11891
guest 23.12.2009 02:07 # −1
guest 23.12.2009 00:04 # −2
guest 23.12.2009 15:54 # −1
procedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
begin
if Mode = True then
FSilentMode := simSilent
else
FSilentMode := simMessageBoxes;
end;
Где здесь плохо читаемый код? Чем плохо название параметра?
guest 23.12.2009 16:18 # −1
имеется в виду только не совсем подходящее имя
guest 24.12.2009 11:32 # −1
Надо в стиле IsSilentMode
Тогда удобно будет if IsSilentMode then ...
guest 25.12.2009 09:35 # −1
Красота. :)
adli__82 17.08.2010 14:16 # 0
p.s. хотя впринципе можно
nolka4 23.12.2009 06:36 # −2
эхх, а ведь раньше было время(http://govnokod.ru/best?time=ever) ;)
guest 23.12.2009 16:45 # −2.8
guest 23.12.2009 20:16 # −1
guest 25.12.2009 20:48 # −1
guest 26.12.2009 09:59 # −2
guest 26.12.2009 10:31 # −2
guest 27.12.2009 20:33 # −1
guest 28.12.2009 15:09 # −1
guest 03.01.2010 17:37 # −1
StriderMan 06.01.2010 01:42 # +2
guest 08.01.2010 03:49 # 0
Вобщем минусую. Хотя дельфе сам по себе гуан и напихает мусора кучу.
stokito 15.01.2010 01:40 # 0
Булеву арифметику я не знал. И мне было по началу очень непривычно видеть короткую запись. Так что такая запись имеет право быть если это ваш стиль, но если программа другие разработчики будут работать с вашими исходниками (а с FastReport именно так) то тут уже свои стили другим навязывать нельзя а использовать стандартный Борландовский.
Так что уже говнокод.
stokito 15.01.2010 01:40 # 0
Например в строчке
Mode может быть функцией возвращающей булево значение. Тогда желательно писать Mode() чтобы было видно что это вызов функции.
stokito 15.01.2010 01:40 # 0
Что будет результатом выражения if Mode = True then если:
Может вообще исключение получим? Потому что в этом месте вроде как значение должно быть приведено к типу, что не всегда можно. Или как?
Если мне не изменяет память то когда то при работе с базой я именно специально так и писал сравнивая сами значения. Хотя это давненько было могу брехать.
По тексту метода аргумент Mode обычного булевого типа, так что говнокод.
stokito 15.01.2010 01:41 # 0
Смотрим на код всего метода:
Как видно этот метод просто изменяет внутреннее поле и ничего не возвращает, значит этот метод сеттер свойства объекта (property) которое выглядеть должно примерно так:
property SilentMode: Boolean read GetSilentMode write SetSilentMode;
guest 01.04.2010 15:00 # −1
Смотрим в другом контексте - контексте вызовов из других мест.
SetSilentMode(true)
SetSilentMode(false)
Если обернуто, то
SilentMode := true
По-моему все понятно... А в таком маленьком кусочке кода неприятных ощущений не вызывает.
stokito 15.01.2010 01:41 # 0
То есть намерено разработчиком было выбрано такое имя аргумента свойства и без приставки Is, так что говнокод дважды.
Теперь хочу попросить взглянуть ещё раз на код метода. Если я правильно понял то это просто сеттер для внутреннего поля FSilentMode.
Но тип свойства и внутреннего поля отличаются! Хотя по идее это одно и тоже!
Не ну конечно возможно что внутреннее поле FSilentMode перечисляемого типа. Ну например типа такого:
Но тогда бы понту не было бы от этого отдельного сеттера потому что проще использовать Exclude и Include. В этом методе значения присваиваются стирая любые другие комбинации, значит FSilentMode не перечисляемого типа.
Значит поле имеет целый тип а свойство булевый.
Из за этого прийдётся ещё и писать гетер GetSilentMode, вместо того чтобы прямо написать read FSilentMode.
Короче как ни крути сетер и гетер не нужны, так что опять говнокод.
stokito 15.01.2010 01:42 # 0
a = b ? 1 : 0;
если b будет истинно то переменной a будет присвоена единица, иначе ноль.
IfThen перегружена для строк (в модуле StrUtils) и для целых и вещественных (в модуле Math)
Используется это чудо примерно так:
Одна строчка к тому же более осмысленная!
stokito 15.01.2010 01:42 # 0
Обычный тип Char не поддерживается, поэтому каждый раз одиночные символы преобразоваться в строку которая занимает памяти больше: спереди записывается длина строки а в конце добавляется Null символ. К тому же строка уже не значение а указатель на значение. Выделение памяти очень дорогая операция. В критических по производительности местах (в циклах) такая хрень станет тормозом, если не будет исправлена оптимизатором.
Перечисления использовать нельзя, хотя и можно изъебнутся и привести перечисление к целому но это низкоуровневая операция и вроде как не есть гуд для Дельфи. Вот на Си такое пожалуйста, сколько угодно.
Кроме перечислений есть ещё set'ы которые даже к целому не приравняешь потому что внутри дельфи их оптимизирует и хранит одним байтом (опять таки могу ошибаться!).
adli__82 17.08.2010 14:26 # 0
Видало 32 байта (256 бит по биту на каждый элемент множества)
Stalker 17.08.2010 14:45 # 0
влазит в 1 байт.
stokito 15.01.2010 01:42 # 0
Вполне нетривиальный пример:
Допустим NumberAsString пустая, тогда вычисляется это так:
stokito 15.01.2010 01:43 # 0
Вывод. Однозначно говнокод. Возможно я в чём то ошибаюсь потому что на дельфи писал уже давненько, да к тому же на 7мом, да к тому же не писал и разбирался как работает полностью говнокодовая программа. Там такой говнокодище что все примеры на этот ресурсе сосут. Хотя может это и преувеличении но не сильное.
Если что поправьте меня пожалуйста.
bugmenot 01.06.2010 22:19 # 0
a > b = true
рожают только ступиденты "для большей ясности"