![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как грамотрее написать вот такой код [D6, XP]
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]разделитель шаблонов просто другой нужно. не подчеркивание