Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.72 MB
Время: 0.015 c
2-1262255716
Александр К
2009-12-31 13:35
2010.03.07
Помогите перевести с c++ в pas (Оочень маленький участок кода)


3-1235022074
Программер
2009-02-19 08:41
2010.03.07
5 миллионов записей


6-1211355931
lead-in
2008-05-21 11:45
2010.03.07
посылка сообщения в локальной сети


15-1261220394
@!!ex
2009-12-19 13:59
2010.03.07
Где прочитать отзывы про WiMax оборудование?


15-1261447784
xayam
2009-12-22 05:09
2010.03.07
Проект Россия 3




   Наверх