![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация
1991 © (2008-12-16 14:57:00)Помогите с оптимизацией: Можно ли сократить не выполняя несколько раз проверок?
if ((mInId <> -1) and (mId = mInId))
or ((cInId <> -1) and (cId = cInId))
then
cItem.Expand;
if (mInId <> -1) and (mId = mInId) then
fFocusItem := mItem;
if (cInId <> -1) and (cId = cInId) and not Assigned(fFocusItem)
then
fFocusItem := cItem;
Правильный$Вася (2008-12-16 17:42:00) [1]
> clickmaker © (16.12.08 17:14) [10]
у тебя вон и Len, и i
целая орда переменных :))
clickmaker (2008-12-16 17:14:00) [2]если исходную строку менять нельзя, то без переменной не получится. Ибо Result уже будет )
если var, то можно
либо так
Len := Length(s);
SetLength(Result, Len);
for i:=1 to Len do
Result[i] := s[Len-i+1];
Ega23 (2008-12-16 17:00:00) [3]
> я бы через перестановку символов сделал.
> Без использования дополнительной переменной, как в лабах
> задают -)
Я вот этого как-то понять не могу. Совсем без дополнительной переменной? Или таки один Char можно завести?
clickmaker (2008-12-16 16:48:00) [4]> А, например, в такой:
>
> function ReverseString
я бы через перестановку символов сделал.
Без использования дополнительной переменной, как в лабах задают -)
Ega23 (2008-12-16 15:58:00) [5]
> нельзя ж во всем на железку полагаться
> иногда и самому думать надо
> а то как батонокидательство будет
Экономить не там надо (хотя и в такой ситуации лучше экономить).
А, например, в такой:
function ReverseString(const s : string) : string;
var
i : Integerl
begin
Result := '';
for i:= Length(s) downto 1 do Result := Result + s[i];
end;
Правильный$Вася (2008-12-16 15:51:00) [6]
> Optimization галку поставь.
нельзя ж во всем на железку полагаться
иногда и самому думать надо
а то как батонокидательство будет
Ega23 (2008-12-16 15:38:00) [7]Project -> Options -> Compiler -> Code Generation -> Optimization галку поставь.
:о)
1991 (2008-12-16 15:15:00) [8]
> Так устроит ? :))
Спасибо. Так выглядит действительно лучше..
Jeer (2008-12-16 15:09:00) [9]Так устроит ? :))
R1 := ((mInId <> -1) and (mId = mInId));
R2 := ((cInId <> -1) and (cId = cInId));
if (R1 or R2) then
cItem.Expand;
if R1 then
fFocusItem := mItem;
if R2 and not Assigned(fFocusItem) then
fFocusItem := cItem;
Если не учитывать событийность, то можно еще сократить, но..
А вообще-то, компилятору пофиг такие упражнения с исходниками.
1991 (2008-12-16 15:03:00) [10]Может что лишнее написал. Например по 2 раза проверяются
if (mInId <> -1) and (mId = mInId)
и
if (cInId <> -1) and (cId = cInId)
Jeer (2008-12-16 15:00:00) [11]А что беспокоит ?