Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.054 c
11-1176370217
Dmitry___
2007-04-12 13:30
2007.11.11
Unicode и Memo.Selection


15-1191309571
Ega23
2007-10-02 11:19
2007.11.11
Задачник посоветуйте


2-1192786979
Aladdinych
2007-10-19 13:42
2007.11.11
Как создать почтовой сообщение


5-1163074690
karton
2006-11-09 15:18
2007.11.11
TabControl внутри компонента


1-1187850968
elserpiente
2007-08-23 10:36
2007.11.11
как прочитать version information





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский