Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Как грамотрее написать вот такой код   Найти похожие ветки 

 
Abcdef123   (2007-10-19 12:07) [0]

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

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


 
Ins ©   (2007-10-19 12:09) [1]

Result:= (pubPreFixA = "") or (pubPreFixA = "ACT_")...


 
Reindeer Moss Eater ©   (2007-10-19 12:12) [2]

Result := (pubPreFixA = "") or (Pos(pubPreFixA,"ACT_BUD_FOR_PYR_") > 0)


 
Ins ©   (2007-10-19 12:15) [3]


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

Действительно прикольно. А если преффикс будет "D_"?

:)


 
Ins ©   (2007-10-19 12:17) [4]

Можно еще просто объявить константный массив префиксов, и делать просто поиск в нем.


 
Reindeer Moss Eater ©   (2007-10-19 12:19) [5]

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


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

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

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


 
Ins ©   (2007-10-19 12:22) [7]


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

в цикле


 
Reindeer Moss Eater ©   (2007-10-19 12:24) [8]

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


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

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


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


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

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


 
Reindeer Moss Eater ©   (2007-10-19 12:27) [11]

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


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

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


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


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

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


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

я вот так попробовала
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


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

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


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


> Abcdef123   (19.10.07 12:41) [14]


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


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

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


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

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

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;



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

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


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

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

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


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


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


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

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

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


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

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

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

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

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


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
5-1163074690
karton
2006-11-09 15:18
2007.11.11
TabControl внутри компонента


9-1163003459
DevilDevil
2006-11-08 19:30
2007.11.11
Альфаканал


2-1192469739
KokocIK
2007-10-15 21:35
2007.11.11
Таблицы, СУБД Oracle


11-1176983639
restar82
2007-04-19 15:53
2007.11.11
ошибка при компиляции


2-1192463826
Lamer666
2007-10-15 19:57
2007.11.11
PNG