Форум: "Прочее";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Внизif Value = True then Найти похожие ветки
← →
StriderMan © (2009-12-22 11:46) [0]Откопал недавно в исходниках FastReport такой кусок:
if Mode = True then
Лично я считаю что это образчик неграмотного и безкультурного кода. За такое в нашем отделе принято посмеиваться и всячески подначивать написавшего. Естественно сосискатель написавшей такое в тесте скорее всего работу не получит. Тем не менее на одном из форумов большинство уверяет что это мол стиль такой, а не говнокод. Что думаете господа мастера? Может я не прав?
← →
Sergey13 © (2009-12-22 11:54) [1]А я давеча на заборе такое видел!!!
О времена! О нравы!
← →
KSergey © (2009-12-22 12:11) [2]иногда зависит от привычек автора или используемых им ранее языков: в некоторых подобное необходимо (типа PHP).
Причем ровно от этого же зависит и ответ на исходный вопрос: говно или не говно
← →
Sha © (2009-12-22 12:15) [3]В генофонде изредка встречается.
← →
Дмитрий С © (2009-12-22 12:24) [4]var
B: Boolean;
begin
B := Boolean(2);
if B then ShowMessage("if B then");
if B = true then ShowMessage("if B = true then");
end;
← →
Sha © (2009-12-22 12:27) [5]> Дмитрий С © (22.12.09 12:24) [4]
> var
> B: Boolean;
> begin
> B := Boolean(2);
За такое - расстрел на месте, как и за это:if Mode = True then
begin
Result := True
end
else begin
Result := False
end;
← →
Ega23 © (2009-12-22 12:28) [6]
> if Mode = True then
а что такое Mode и каков ея тип данных?
← →
StriderMan © (2009-12-22 12:29) [7]
> Дмитрий С © (22.12.09 12:24) [4]
Да, в boolean можно запихать много чего, целый байт! Но за такое вообще бить надо :)
← →
Медвежонок Пятачок © (2009-12-22 12:29) [8]procedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
begin
if Mode = True then
← →
StriderMan © (2009-12-22 12:30) [9]
> а что такое Mode и каков ея тип данных?procedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
begin
if Mode = True then
FSilentMode := simSilent
else
FSilentMode := simMessageBoxes;
end;
← →
Piter © (2009-12-22 12:32) [10]Удалено модератором
← →
StriderMan © (2009-12-22 12:38) [11]
> ну ты крут, в популярной компоненте отыскал нарушение стилевых рекомендаций )) Думаю, тема обоснована не возмущением насчет FastReport, а собственной гордостью - мол, какой я крутой, для меня это детская ошибка ))
повеселило :))))
> Если "if Value = True then" это единственная "ошибка" на весь код FastReport, то это практически идеальный компонент.
FastReport"ом я в целом доволен. Тем не менее подобные коды наводят на определенные мысли...
> Со временем приходит осознание, что идеального кода не бывает.
у меня со временем пришло сознание что при коллективной разработке таких вольностей быть не должно категорически
> Для крупных, массовых, коммерческих проектов это еще более актуально.
Для продуктов, продаваемых с исходниками красота кода очень важна
← →
Хитрий Лис (2009-12-22 12:38) [12]
> StriderMan © (22.12.09 11:46)
> Лично я считаю...
Вот давайте на этом и остановимся :) хотя нет... немножко посклочничаем...
> ... что это образчик неграмотного и безкультурного кода.
А в чём, простите, неграмотность и безкультурье?
> За такое в нашем отделе принято посмеиваться и всячески подначивать написавшего.
Потому что, в вашем отделе работают глупые и недалёкие работники :) предположу, что по-молодости...
> Естественно сосискатель написавшей такое в тесте скорее всего работу не получит.
Соискателю повезёт :)
> Тем не менее на одном из форумов большинство уверяет что это мол стиль такой, а не говнокод.
Они правы, потому что они не глупые и не недалёкие :)
> Может я не прав?
Вы неправы.
← →
StriderMan © (2009-12-22 12:42) [13]
> А в чём, простите, неграмотность и безкультурье?
В том что код содержит избыточность. Зачем это? Тогда для надежности можно было написатьif (Mode = true) = true then
> Потому что, в вашем отделе работают глупые и недалёкие работники :) предположу, что по-молодости...
Потому что в нашем отделе занимаются коллективной разработкой и есть определенные правила хорошего тона, которых мы придерживаемся
← →
StriderMan © (2009-12-22 12:43) [14]
> В генофонде изредка встречается.
Нашел только в одном месте в CLX
← →
Sha © (2009-12-22 12:48) [15]> StriderMan © (22.12.09 12:43) [14]
> Нашел только в одном месте в CLX
В D7 таких мест точно больше,
причем есть проверки и на True и на False,
но не скажу, что от этого код плохо читается.
← →
Хитрий Лис (2009-12-22 13:01) [16]
> StriderMan © (22.12.09 12:42) [13]
> > А в чём, простите, неграмотность и безкультурье?
> В том что код содержит избыточность.
Код не содержит избыточности. Но даже если бы и содержал - то какое отношение это имеет к неграмотности и безкультурью ?
А если не секрет, какой продукт разрабатывает ваш коллектив ?
Мне так, чисто для себя, поржать...
← →
Piter © (2009-12-22 13:06) [17]Удалено модератором
← →
Дмитрий Белькевич (2009-12-22 13:11) [18]>Лично я считаю что это образчик неграмотного и безкультурного кода.
Бескультурье ;)
← →
boriskb © (2009-12-22 13:19) [19]> [0] StriderMan © (22.12.09 11:46)
На мой взляд ничего криминального.
Такой факт может очем либо бОльшем сказать, но однозначно ничего не говорит.
Это как плотник забивающий гвоздь с трех ударов, когда "крутые" умеют с одного.
Если ты такого плотника сразу зачислишь в неумехи, то очень можешь ошибиться.
← →
Sha © (2009-12-22 13:20) [20]Человеку свойствинно ошебаться.
← →
Sergey13 © (2009-12-22 13:28) [21]> [19] boriskb © (22.12.09 13:19)
Первоисточники говорят об ином.
"Каб не клин и не мох, так и плотник бы сдох" (с) старинная пословица.
Т.е. гвоздями, крутые плотники вообще могут не пользоваться. А вот необходимость патчей и прочих хотфиксов нашими предками никогда не оспаривалась.
8-)
← →
StriderMan © (2009-12-22 13:50) [22]
> А если не секрет, какой продукт разрабатывает ваш коллектив
Неее, этого я не скажу. Но продукт серьезный. Продается к счастью без исходников :)
> Да чего тут обсуждать. Не знаю сколько автору лет, но предполагаю,
> что < 25
26, и я не бородат :)
> Бескультурье ;)
пардон, да. Увидел свою неграмотность уже после поста.
> Но даже если бы и содержал - то какое отношение это имеет к неграмотности и безкультурью ?
самое прямое.
← →
RWolf © (2009-12-22 13:56) [23]> if Mode = True then
Вовсе не факт, что код, вызывающий эту конструкцию, написан на Delphi, и не передаёт в переменной Mode своё понимание булевой Истины (каковая в разных языках может быть 1, -1, 0xFF и проч.).
Так что — да, неграмотный код.
Правильный способ только один — if Mode then...
Вообще, имхо, сабжевый способ записи, свидетельствует о слабом знании языка и основ булевой алгебры.
← →
StriderMan © (2009-12-22 14:00) [24]ну хорошо, покопался вот в исходниках старых, нашел такое:
if (SomeObj1.SomeSubObject.SomeProp = true) or (SomeObj2.SomeSubObject.SomeProp = false) or (SomeObj3.SomeSubObject.SomeProp = true) then
DoSomething
Это что, тоже нормально?
← →
Alx2 © (2009-12-22 14:02) [25]Мне не нравится такой изврат над булевыми выражениями. Но если того где-то требуют правила оформления кода - нефиг фыркать, имхо. Привычка могла оттуда пойти. А вот в некоторых вузах преподы учат ребят писать в таком стиле - вот это, уже, перебор. Код должен читаться легко. Кому-то стало легче от описанного подхода, кому-то противнее. Кто-то предпочитает держать читателя в курсе дела через "говорящие" имена и короткие методы, что не обязательно требует сравнения с истиной.
Все равно, в итоге победит более способный ритор. Тут не математика :)
В свое время, рекомендации креститься тремя перстами, вместо двух, привели к расколу.
← →
KSergey © (2009-12-22 14:10) [26]> StriderMan © (22.12.09 12:42) [13]
> Потому что в нашем отделе занимаются коллективной разработкой
> и есть определенные правила хорошего тона, которых мы придерживаемся
Молодцы, возьмите пирожок с полочки.
Но один на всех, раз уж вы единый коллектив.
Я не вижу вреда от приведенного кода, хотя и пользы, конечно, тоже.
Разовые случаи его встречания могут объясняться совершенно разными причинами.
Вплоть до того, что в этом месте автор планирует в будущем вместо True написать значение какой-то настройки. Или просто "сроки горели".
← →
StriderMan © (2009-12-22 14:15) [27]
> в будущем вместо True написать значение какой-то настройки. Или просто "сроки горели".
Всем известно что нет ничего более постоянного чем временное.
← →
Rouse_ © (2009-12-22 14:23) [28]реализация кода в виде if B = True then говорит как минимум о не полном предствалении корректной работы с типами переменных. Обычно авторы такого кода используют до кучи итератор I типа DWORD, а потом долго размышляют почему-же всетаки выполняется следующий цикл
for I := 0 to List.Count - 1 do
с учетом чтоList.Count
реально равен нулю.
← →
Думкин © (2009-12-22 14:26) [29]
C:\Program Files\Borland\BDS\4.0\source\Win32\vcl\DdeMan.pas
function TDdeMgr.AllowWildConnect(hszApp: HSZ; hszTopic: HSZ): HDdeData;
var
conns: packed array[0..1] of THSZPair;
begin
Result := 0;
if hszTopic = 0 then Exit;
if AllowConnect(hszApp, hszTopic) = True then
begin
conns[0].hszSvc := FHszApp;
conns[0].hszTopic := hszTopic;
conns[1].hszSvc := 0;
conns[1].hszTopic := 0;
Result := DdeCreateDataHandle(ddeMgr.DdeInstId, @conns,
2 * sizeof(THSZPair), 0, 0, CF_TEXT, 0);
end;
end;
C:\Program Files\Borland\BDS\4.0\source\Win32\vcl\ComCtrls.pas
procedure TToolBar.SetButtonHeight(Value: Integer);
begin
if Value <> FButtonHeight then
begin
FButtonHeight := Value;
if ThemeServices.ThemesEnabled = True then
RecreateWnd;
RecreateButtons;
end;
end;
procedure TToolBar.SetButtonWidth(Value: Integer);
begin
if Value <> FButtonWidth then
begin
FButtonWidth := Value;
if ThemeServices.ThemesEnabled = True then
RecreateWnd;
RecreateButtons;
end;
end;
← →
Rouse_ © (2009-12-22 14:30) [30]
> Думкин © (22.12.09 14:26) [29]
То что часть исходников VCL писали совершенно левые люди и иногда с грубейшими ошибками, всем известно и это как раз абсолютно не говорит о том это правильный подход :)
← →
StriderMan © (2009-12-22 14:36) [31]
> используют до кучи итератор I типа DWORD, а потом долго размышляют почему-же всетаки выполняется следующий цикл
с такими извратами не встречался.
Чаще вижу что-то вродеif (a=b) then
Result := true
else
Result := false;
вместо православногоResult := a = b;
← →
Б (2009-12-22 14:42) [32]А есть ещё и такие перлы:
Function IsTrue(B: boolean): boolean;
begin
If (B = True) then Result:= True
else Result:= False;
End;
← →
Хитрий Лис (2009-12-22 14:42) [33]
> Думкин © (22.12.09 14:26) [29]
Как посмел! Ты же покусился на святое!
Тут раз в три месяца выплывает очередной правдоруб со своими представлениями что хотел сказать автор, на что автору кода обычно дефекабельно...
← →
StriderMan © (2009-12-22 14:55) [34]
> Piter © (22.12.09 13:06) [17]
> Да чего тут обсуждать. Не знаю сколько автору лет, но предполагаю,
> что < 25(Автору > 25) = true
:)
← →
Mystic © (2009-12-22 14:56) [35]Я так иногда пишу. Обычно правда
= False
. И не потому, что не знаю, а потому что мне так больше нравится. Особенно, когда название переменной не содержит явно вопроса (IsFile), как например в этом случае.if Mode then // а что такое Mode??? Вообще, эта строка по английски коробит
if Mode = True then// тут как-то более явно, что Mode это переменная типа Boolean
← →
StriderMan © (2009-12-22 15:02) [36]
> // а что такое Mode??? Вообще, эта строка по английски коробитprocedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
begin
if Mode = True then
FSilentMode := simSilent
else
FSilentMode := simMessageBoxes;
end;
← →
Alx2 © (2009-12-22 15:04) [37]так и просится вместо mode: boolean переменная типа а-ля TSilentMode
← →
Дмитрий Тимохов (2009-12-22 15:05) [38]не вижу ничего плохого, иногда сам так пишу, когда считаю, что читающему будет понятней.
не вижу ничего зазорного.
← →
Piter © (2009-12-22 15:07) [39]Rouse_ © (22.12.09 14:23) [28]
реализация кода в виде if B = True then говорит как минимум о не полном предствалении корректной работы с типами переменных
... в Delphi. Это да. Но это не говорит о слабом уровне программиста как таковом, он легко мог писать по старой памяти. Например, в PHP писать так "if a then" вообще крайне не рекомендуется, ибо там динамическая типизация.
← →
Ega23 © (2009-12-22 15:13) [40]
function ConvertBooleanValue(const Value : Boolean) : Boolean;
begin
if (Value = True) then
begin
Result := False;
end
else
if (Value = False) then
begin
Result := True;
end
else
raise Exception.Create("Unknown boolean value");
end;
← →
Mystic © (2009-12-22 15:15) [41]> StriderMan © (22.12.09 15:02) [36]
И чем это плохо? Вообще, условиеif a = b then
встречается часто и никаких трудностей с его пониманием нет, нужный шаблон в мозгу срабатывает на автомате.if a then
уже встречается реже.
Вообще, ход моей мысли такой: "Если a равно True", что кодируется вif a = True
, потом оптимизируется доif a
. При чтении кода ситуация часто обратная:if a
в конце концов переходит в сознании до "Если a равно True".
Нет, если бы трюк позволял сэкономить несколько строчек кода, то его применение было бы полезно. Но так спор из-за шести символов, которые никак не влияют на читабельность (а может ее в чем-то даже улучшают).
← →
pasha_golub © (2009-12-22 15:16) [42]
> Особенно, когда название переменной не содержит явно вопроса
> (IsFile), как например в этом случае.
Вы имеете мои +100. Читабельность превыше всего!
← →
Медвежонок Пятачок © (2009-12-22 15:19) [43]Но надо же еще сам результат сравнения аргумента с литералом сравнить на истинность.
"если условие "а равно истине" истинно"
то есть читабельнее так:
if (a = true) = true then ....
← →
Ega23 © (2009-12-22 15:20) [44]
> pasha_golub © (22.12.09 15:16) [42]
У тебя же было что-то такое с вариантами. Когда явно на = true нужно было сравнивать.
← →
Alx2 © (2009-12-22 15:21) [45]if isTrueAndNothingExceptTrue((a = true) = true) then ....
← →
Sergey Masloff (2009-12-22 15:21) [46]Rouse_ © (22.12.09 14:23) [28]
>реализация кода в виде if B = True then говорит как минимум о не полном >предствалении корректной работы с типами переменных. Обычно авторы >такого кода используют до кучи итератор I типа DWORD, а потом долго >размышляют почему-же всетаки выполняется следующий цикл
>for I := 0 to List.Count - 1 do с учетом что List.Count реально равен нулю.
Да ну, это анекдот. Те кто уже знают про DWORD такое писать не могут ;-)
← →
StriderMan © (2009-12-22 15:22) [47]
> Но так спор из-за шести символов, которые никак не влияют на читабельность
Так из-за подобной фигни и возникают все холивары :)
← →
Mystic © (2009-12-22 15:24) [48]Ой, до извратства можно дойти как угодно
{$B-}
Result := SelectDialog.Execute() and (IsDirExists(SelectDialog.Path) or CreateDir(SelectDialog.Path)) and CopyFiles(S, SelectDialog.Path);
← →
StriderMan © (2009-12-22 15:30) [49]
> Mystic © (22.12.09 15:24) [48]
че, очень изящно вышло ;)
← →
RWolf © (2009-12-22 15:33) [50]
> Читабельность превыше всего!
Выражение
if Form1.Visible then DoSomething;
читабельнее, чем
if Form1.Visible=True then DoSomething;
← →
Дуп (2009-12-22 15:38) [51]> Rouse_ © (22.12.09 14:30) [30]
Я никого не защищал!! :)
Самое интересное у нас было на семинаре по Аксапте недавно. Консультант говорит как не надо накладывать фильтр на данные и для примера как надо лезет в родной код от микрософта, а там это и сидит - неправильное. Матов было много. :)
Причем то неправильное, оно не на уровне читабельности и красивости. Там реальный косяк. Ну, и я же вроде упоминал уже как там было, что 2=1.
(1/3+1/3+1/3)+(1/3+1/3+1/3)=1.
← →
Дмитрий Тимохов (2009-12-22 15:40) [52]Оба плохо читаются, хорошо читается
if Form1.Visible=True then
DoSomething;
← →
Alx2 © (2009-12-22 15:40) [53]>Дуп (22.12.09 15:38) [51]
Кэш твой - враг твой :)
← →
Mystic © (2009-12-22 15:40) [54]
> Выражение
> if Form1.Visible then DoSomething;
> читабельнее, чем
> if Form1.Visible=True then DoSomething;
Это да. Но если брать Mode вместо Form1.Visible, то мне больше нравится второй вариант. На самом деле я большинство условных операторов мысленно проговариваю, и получается нечто такое:
если Form1 видима равно True, то { хм... }
если Form1 видима, то... { нормальное предложение }
если режим то ... { хм... }
если режим установлен в True, то { в принципе нормально }
> че, очень изящно вышло ;)
Это сокращенный вариант, в деле было пять AND-ов, внутри пару OR-ов, все работало с ShellApi функциями и оператор занимал три строки.
← →
Думкин © (2009-12-22 15:43) [55]
> Alx2 © (22.12.09 15:40) [53]
Мне его чистить жалко. Я тут оказывается, один пароль посеял. :(
← →
RWolf © (2009-12-22 15:43) [56]
> Дмитрий Тимохов (22.12.09 15:40) [52]
Люди не говорят «Если форма видима — это правда, то сделай то-то».
Естественный язык звучит так: «Если форма видима — сделай то-то».
← →
RWolf © (2009-12-22 15:46) [57]
Mystic © (22.12.09 15:40) [54]
> Это да. Но если брать Mode вместо Form1.Visible, то мне
> больше нравится второй вариант.
Это потому, что для переменной Mode выбрано плохое имя, не соответствующее её назначению.
← →
Дмитрий Тимохов (2009-12-22 15:46) [58]>>RWolf © (22.12.09 15:43) [56]
Читай Мистика выше - полностью согласен с ним.
Насчет визибле, может и поторопился.
← →
Alx2 © (2009-12-22 15:47) [59]И тип! Тип - тоже! :)
← →
StriderMan © (2009-12-22 15:51) [60]
> Это потому, что для переменной Mode выбрано плохое имя, не соответствующее её назначению.
это уже другой холивар :) пусть вместо Mode будет абстрактное Value
← →
RWolf © (2009-12-22 16:40) [61]Абстрактные идентификаторы не есть хорошо; в идеале, программа должна напоминать пересказ алгоритма человеческим языком. Спору нет, бывают случаи, когда абстрактное имя приходится к месту (или просто нельзя переименовать идентификатор), в таких случаях можно и с True/False сравнить.
Вообще, это вопрос восприятия булевых переменных. Если для человека это простое перечисление из двух абстрактных значений «True» и «False», для него, наверное, нагляднее будет сравнивать переменную с константой. Лично я воспринимаю такую переменную, как условие ветвления, и с этой точки зрения такое сравнение просто захламляет код.
← →
DVM © (2009-12-22 17:08) [62]
> StriderMan © (22.12.09 11:46)
> if Mode = True then
>
> Лично я считаю что это образчик неграмотного и безкультурного
> кода. За такое в нашем отделе принято посмеиваться и всячески
> подначивать написавшего.
На мой взгляд такая конструкция более наглядна. Сам правда так не пишу (исключительно из за того что так длиннее), но не вижу никаких причин посмеиваться над такой записью.
← →
sniknik © (2009-12-22 17:46) [63]> в некоторых подобное необходимо (типа PHP).
jet если указывать в where boolper = true запрос работает быстрее чем where boolper, хотя результат и одинаковый.
во втором случае ни индексы ни оптимизатор не работает как понимаю.
← →
ANB (2009-12-22 18:05) [64]
> where boolper
В оракле такое вообще недопустимо. Обязательно должен быть символ сравнения.
← →
Кто б сомневался © (2009-12-22 18:09) [65]
> Откопал недавно в исходниках FastReport такой кусок:
>
> if Mode = True then
>
> Лично я считаю что это образчик неграмотного и безкультурного
> кода.
В разных ситуациях, следует по разному писать. Нужно делать код как можно понятнее.
К примеру лучшим вариантов для этого кода, будет не
If mode = true then и не
if Mode then
И то и то не очень.
Лучше так
const
GAME_MODE_ON = true; // для примера
if Mode = GAME_MODE_ON then
← →
Piter © (2009-12-22 18:10) [66]Удалено модератором
← →
Кто б сомневался © (2009-12-22 18:10) [67]Здесь сразу понятно какой режим включен. Первый или второй, т.е. не нужно возвращатся и смотреть что это за Mode.
← →
Кто б сомневался © (2009-12-22 18:12) [68]
> Piter © (22.12.09 18:10) [66]
>
> Кто б сомневался © (22.12.09 18:09) [65]
> if Mode = GAME_MODE_ON then
>
> ну это ты уже параноишь.
Нет, это очень спасает в некоторых ситуациях.
Смотри допустим в мое коде реальном :
Есть метод, который принимает
RestartWindows(AShutdown: boolean);
Иначе если false рестарт.
Я пишу:
const
SHUTDOWN = true;
begin
RestartWindows(SHUTDOWN);
Вот для таких случаев это очень и очень удобно.
← →
Кто б сомневался © (2009-12-22 18:16) [69]или
GetIcon(Icon: Ticon, LargeIcon: boolean);
Пишем.
const
GET_LARGE_ICON = true;
GetIcon(vIcon, GET_LARGE_ICON);
Это конечно не сравнение if, но у меня были случае когда и при сравнении удобнее юзать подписанные константы.
← →
Дмитрий Белькевич (2009-12-22 18:31) [70]
procedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
begin
if Mode = True then
FSilentMode := simSilent
else
FSilentMode := simMessageBoxes;
end;
procedure TfrxEngineOptions.SetSilentMode(Silent: Boolean);
begin
if Silent then
FSilentMode := simSilent
else
FSilentMode := simMessageBoxes;
end;
← →
Piter © (2009-12-22 18:37) [71]вообще-то для этого придумали перечисляемые типы. Например:
TIconType = (itBigIcon, itSmallIcon);
пишем
GetIcon(vIcon, itBigIcon)
А ты перечисляемый тип из двух элементов решил заменить на boolean, как на подходящий по размерности. С таким же успехом любой перечисляемый тип можно заменить на byte и кучей самостоятельно определенных констант. Вопрос - нафига.
← →
Кто б сомневался © (2009-12-22 18:43) [72]
> вообще-то для этого придумали перечисляемые типы. Например:
Я знаю, но там где два значения, удобнее и практичнее использовать boolean. Не нужно ничего объявлять лишнего.
Собственно так делал и borland в своем registry и вообще часто встречается конструкция.
← →
Ega23 © (2009-12-22 18:44) [73]
procedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
const
ar : array[0..1] of (какой-то тип данных) = (simMessageBoxes, simSilent);
begin
FSilentMode := ar[Ord(Mode)];
end;
← →
Mystic © (2009-12-22 18:48) [74]
procedure TfrxEngineOptions.SetSilentMode(Mode: Boolean);
const
ar : array[Boolean] of (какой-то тип данных) = (simMessageBoxes, simSilent);
begin
FSilentMode := ar[Mode];
end;
??
← →
Mystic © (2009-12-22 18:49) [75]Только вместо ar лучше какой-нить SimTable
← →
GDI+ (2009-12-22 18:50) [76]
> StriderMan © (22.12.09 11:46)
>
> Откопал недавно в исходниках FastReport такой кусок:
>
> if Mode = True then
Писал бывший сишник, так как в C есть true и TRUE.
← →
Rouse_ © (2009-12-22 18:54) [77]
>
> Писал бывший сишник, так как в C есть true и TRUE.
Ааа, а там видимо уже отменили if (B) {} или if (!B) {}
← →
RWolf © (2009-12-22 18:58) [78]
> Mystic © (22.12.09 18:48) [74]
Лучше всё же так:procedure TfrxEngineOptions.SetSilentMode(Mode: TSilentMode);
begin
FSilentMode := Mode;
end;
← →
Piter © (2009-12-22 19:02) [79]Кто б сомневался © (22.12.09 18:43) [72]
Я знаю, но там где два значения, удобнее и практичнее использовать boolean
твой вариант:GET_LARGE_ICON = true;
GET_SMALL_ICON = false;
мой вариант:TIconType = (itSmall, itBig);
чем твой вариант удобнее, поясни пожалуйста?
насчет практичности - что ты имел в виду? И то и другое в памяти занимает 1 байт (если ты про это).
← →
Piter © (2009-12-22 19:04) [80]не говоря уже о том, что мой вариант легко расширяем, допустим, на случай:
TIconType = (itSmall, itBig, itVeryBig);
← →
Кто б сомневался © (2009-12-22 19:13) [81]
> Кто б сомневался © (22.12.09 18:43) [72]
> Я знаю, но там где два значения, удобнее и практичнее использовать
> boolean
>
> твой вариант:
>
> GET_LARGE_ICON = true;
> GET_SMALL_ICON = false;
>
> мой вариант:
>
> TIconType = (itSmall, itBig);
>
> чем твой вариант удобнее, поясни пожалуйста?
>
> насчет практичности - что ты имел
в виду? И то и другое в памяти занимает 1 байт (если ты про это).
Вариант в boolean в функциях используется намного чаще чем в enum типами. в API в VCL - да собственно везде.
Для меня это удобнее
1. Не нужно объявлять при написании функции ничего
2. Не усложняется код в теле функции
3. При работе с функцией, не нужно искать enum тип, обычно приходится жать ctrl + lmb - чтобы посмотреть что там за типы.
4. Не усложняется код, представь если будет куча Enum типов по 2 значения, все б сильно матерились тогда.
← →
RWolf © (2009-12-22 19:14) [82][72][79]
Паскаль — язык со строгой типизацией; раз она есть — надо использовать её преимущества, тут и спорить не о чем.
← →
RWolf © (2009-12-22 19:17) [83]
Кто б сомневался © (22.12.09 19:13) [81]
> GET_LARGE_ICON = true;
> GET_SMALL_ICON = false;
Любую из таких констант можно передать в любую из функций с параметром boolean — а это потенциальные баги.
TIconType из [79] можно передать только в функцию, которая этот тип принимает.
← →
Кто б сомневался © (2009-12-22 19:18) [84]
> Любую из таких констант можно передать в любую из функций
Ну дык ноги плохому танцору мешают :)
Вобще такие вещи всегда локально объявлены.
← →
Piter © (2009-12-22 19:57) [85]Кто б сомневался, судя по всему тут спорить бесполезно. Попробуй у кого-нибудь из delphi профессионалов, кого ты уважаешь, спросить - как будет правильнее на константах или на перечисляемых типах.
← →
Кто б сомневался © (2009-12-22 20:04) [86]
> Попробуй у кого-нибудь из delphi профессионалов, кого ты
> уважаешь, спросить - как будет правильнее на константах
> или на перечисляемых типах.
Что значит "правильнее"? и так и так правильно.
Просто вспомни часто ли ты встречал в функциях enum тип из двух значений, и вспомни как часто встречаются boolean в любых функциях будь то win API или VCL или еще что-то . Вот это и будет ответ.
А это просто надстройка над boolean - для более удобного чтения.
← →
grammar-nazi (2009-12-22 20:08) [87]
> RWolf © (22.12.09 18:58) [78]
>
> Лучше всё же так:
> procedure TfrxEngineOptions.SetSilentMode(Mode: TSilentMode);
>
> begin
> FSilentMode := Mode;
> end;
нет, не лучше. SetSilentMode(Mode: Boolean) разрешает установить один из двух режимов, SetSilentMode(Mode: TSilentMode) разрешает установить один из (High(TSilentMode) - Low(TSilentMode) + 1) режимов.
← →
Piter © (2009-12-22 21:16) [88]Кто б сомневался © (22.12.09 20:04) [86]
Что значит "правильнее"?
то, что вышеописанный уважаемый тобой гуру, посчитает использовать. То есть, чтобы он использовал в такой-то ситации.
← →
Virgo_Style © (2009-12-22 21:50) [89]
> SetSilentMode(Mode: TSilentMode) разрешает установить один
> из (High(TSilentMode) - Low(TSilentMode) + 1) режимов.
А уж TSilentModes: set of TSilentMode вообще позволяет творить чудеса.
Но это все хорошо при условии, что нужны куча режимов или чудеса.
"Каждому овощу - свой фрукт" - кажется, так говорит кто-то из гуру? ;)
← →
oxffff © (2009-12-22 22:35) [90]А если подумать и рассмотреть такой вариант.
function True:integer;
begin
result:=15;
end;
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
var a:integer;
begin
a:=15;
if a=true then showmessage("GOOD");
end;
← →
oxffff © (2009-12-22 22:45) [91]Технически можно сделать так.
Но Delphi 2010 это не хавает.
mytype=record
b:integer;
class operator Equal(a: mytype; b: boolean) : Boolean;
end;
procedure TForm4.FormCreate(Sender: TObject);
var a:mytype;
begin
if a=True then showmessage("Stuff");
end;
← →
oxffff © (2009-12-22 22:47) [92]
> Но Delphi 2010 это не хавает.
Собственно это проблемы Delphi. :)
← →
Rouse_ © (2009-12-23 01:34) [93]
> А если подумать и рассмотреть такой вариант.
>
> function True:integer;
> begin
> result:=15;
> end;
технически можно сделать и так:
#define TRUE = FALSE
#define TRUE (!FALSE)
#define FALSE (!TRUE)
#if !defined(FALSE) || FALSE != 0
#define FALSE 0
#endif
#defineTRUE (1==1)
но такая фигня получиться :)
← →
Германн © (2009-12-23 01:43) [94]
> Rouse_ © (23.12.09 01:34) [93]
Извращенец высшего класса получится! (Без мягкого знака :)
← →
Дмитрий Белькевич (2009-12-23 02:32) [95]#define TRUE (Math.random() > 0.5)
#define FALSE (Math.random() < 0.5)
← →
Джо © (2009-12-23 02:40) [96]Какой же бессмысленный и беспощадный этот цэпэпэ! :)
← →
Аноним © (2009-12-23 02:45) [97]
> StriderMan © (22.12.09 12:38) [11]
шикарно
а зачем пост Piter`а то удалили?
← →
Аноним © (2009-12-23 02:50) [98]
> Тут раз в три месяца выплывает очередной правдоруб со своими
> представлениями что хотел сказать автор, на что автору кода
> обычно дефекабельно...
зато как фекабельно остальным
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Память: 0.72 MB
Время: 0.007 c