Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как грамотрее написать вот такой код [D6, XP]


Страницы:   1 2

Abcdef123 ©   (2007-10-19 12:07:00) 

if (pubPreFixA <> '') AND (pubPreFixA <> 'ACT_') AND (pubPreFixA <> 'BUD_') AND (pubPreFixA <> 'FOR_') AND (pubPreFixA <> 'PYR_') then
     result := False;

Перечисление смотрится не красиво, думаю, как мастера написали бы?
Заранее спасибо


Маша Шрайбер   (2007-10-19 14:37:00) [1]

К сожалению справки нет. Также, как и Дельфи :)
Но я почитаю. Позже. Даже не сомневайтесь.


Сергей М.   (2007-10-19 14:33:00) [2]


> Мне не очевидно, что будет здесь:


Это становится очевидным при первом же чтении справки.


Маша Шрайбер   (2007-10-19 14:27:00) [3]

>> Сергей М. ©   (19.10.07 14:25) [21]
>> Будет False, разве не очевидно ?

Мне не очевидно, что будет здесь:
StrID := TStrID(GetEnumValue(TypeInfo(TStrID), tmpPrefix));
о том и вопрос был.

>> Впрочем, если ты настаиваешь, то

Я ни на чем не настаиваю.


Сергей М.   (2007-10-19 14:25:00) [4]


> Что будет, когда pubPreFixA='MASHA_' ?


Будет False, разве не очевидно ?

Впрочем, если ты настаиваешь, то

Result := (Integer(StrID) >= 0) and  (StrID in StrIDs); //корректно при complete boolean eval = false


Маша Шрайбер   (2007-10-19 14:20:00) [5]

>> Сергей М. ©   (19.10.07 14:08) [18]

Что будет, когда pubPreFixA='MASHA_' ? :)


Сергей М.   (2007-10-19 14:09:00) [6]

TStrID = (Blank, ACT_, BUD_, FOR_, PYR_);


Сергей М.   (2007-10-19 14:08:00) [7]

Примерно так:

type

 TStrID = (Blank, ACT, BUD, FOR, PYR);
 TStrIDs = set of TStringId;
..
var
 StrID: TStrID;
 StrIDs: TStrIDs;
 tmpPrefix: String;

..

StrIDs := [Blank, ACT_, BUD_, FOR_, PYR_];

if pubPreFixA = '' then
 tmpPrefix := 'Blank'
else
 tmpPrefix := pubPreFixA;

StrID := TStrID(GetEnumValue(TypeInfo(TStrID), tmpPrefix));
Result := StrID in StrIDs;


Abcdef123   (2007-10-19 12:56:00) [8]

to Сергей М. [16]
как это?


Сергей М.   (2007-10-19 12:51:00) [9]


> Abcdef123   (19.10.07 12:41) [14]


Может тебе обратить внимание на решение подобных задач с использованием механизма множеств ?


Reindeer Moss Eater   (2007-10-19 12:42:00) [10]

Проще делать наоборот. Сначала False, и затем проверять на True


Abcdef123   (2007-10-19 12:41:00) [11]

я вот так попробовала
var
 arPreFix : array[0..4] of string[4] = ('', 'ACT_', 'BUD_', 'FOR_', 'PYR_');

   for i := 0 to 4 do
   begin
     result := (pubPreFixA = arPreFix[i]) AND result; //это неправильно,но вот как правильно результат прочитать, чтоб резульат отражал когда одно из них совпало, а не все?
   end;

to Reindeer Moss Eater[11,12] - просто у меня в начале функции присвоено result=true; и только если не совпадают кое-какие условия, как типа этого, то идет переприсвоение на false


Ins   (2007-10-19 12:28:00) [12]


> так ей не более читаемый, а более красивый код нужен

Ааааа :) Тогда красиво, не спорю


Reindeer Moss Eater   (2007-10-19 12:27:00) [13]

так ей не более читаемый, а более красивый код нужен


Reindeer Moss Eater   (2007-10-19 12:27:00) [14]

А еще лучше строить условие вычисляя не False, а True


Ins   (2007-10-19 12:27:00) [15]


> Reindeer Moss Eater ©   (19.10.07 12:24) [8]

В принципе прокатит скорее всего, но ИМХО не очень читаемый код.


Маша Шрайбер   (2007-10-19 12:26:00) [16]

type
 TPrefixes = (None,Empty,ACT_,BUD_,FOR_,PYR_);
const
 Prefixes : array[TPrefixes ] of string = ('None','','ACT_','BUD_','FOR_','PYR_');

1. <определяем тип>
2. if <определенный тип> in [Empty,ACT_,BUD_,FOR_,PYR_] then


Reindeer Moss Eater   (2007-10-19 12:24:00) [17]

Если множество ожидаемых сторк детерминировано, то pos вполне прокатит.
И циклов не надо.
Если нет, то прокатит с дополнительным контролем длины.


Ins   (2007-10-19 12:22:00) [18]


> 2.Я подумала, что массив бы использовать, но вот не знаю,
>  как в нем делать поиск в этом случае. :-/ В массивах пок
> ане сильна

в цикле


Abcdef123   (2007-10-19 12:21:00) [19]

to Ins :
1. получается, что предложение Reindeer Moss Eater неправильное?

2.Я подумала, что массив бы использовать, но вот не знаю, как в нем делать поиск в этом случае. :-/ В массивах пок ане сильна


Reindeer Moss Eater   (2007-10-19 12:19:00) [20]

разделитель шаблонов просто другой нужно. не подчеркивание


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо