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

Вниз

Вопрос   Найти похожие ветки 

 
Chort ©   (2007-01-08 11:56) [0]

Вопрос скорее вего по оптимизации кода. Предположим есть функция
function Sabc(a, b:real): Real;
begin
 Result := a*b/2;
end;


Обращаюсь я к ней:

procedure TForm1.ActExecute(Sender: TObject);
var
 a,b,S:real;
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
S:= Sabc(a,b);
Label38.Caption:=FloatToStr(S);
end;


А не проще ли будет сделать так :
procedure TForm1.ActExecute(Sender: TObject);
var
 a,b,S:real;
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
S:= a*b/2;
Label38.Caption:=FloatToStr(S);
end;


короче как правильнее нужно поступать(писать какой вариант)?


 
Чапаев ©   (2007-01-08 11:58) [1]

> как правильнее
Смотря какая цель... Первый вариант медленнее и занимает меньше места, второй -- быстрее.


 
Чапаев ©   (2007-01-08 11:58) [2]

> [1] Чапаев ©   (08.01.07 11:58)
ЗЫ. В общем случае.


 
Думкин ©   (2007-01-08 12:04) [3]

procedure TForm1.ActExecute(Sender: TObject);
begin
Label38.Caption:=FloatToStr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text)/2);
end;


:)


 
antonn ©   (2007-01-08 12:10) [4]

procedure TForm1.ActExecute(Sender: TObject);
var
a,b,S:real;
begin
try
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
S:= a*b/2;
Label38.Caption:=FloatToStr(S);
except

end;
end;


:)


 
Плохиш ©   (2007-01-08 12:18) [5]


> Chort ©   (08.01.07 11:56)  

В общем случае, первый. А то после написания в 50+ местах этой формулы, окажется, что надо отнять от результата отнять 1 ;-)
А вообще-то это продумывается на стадии создания алгоритма...


 
Chort ©   (2007-01-08 12:37) [6]

В общем то мне большая скорость и не нужна. Просто интересно было узнать правильно я делаю или нет. Остановлюсь на первом варианте.


 
Чапаев ©   (2007-01-08 12:38) [7]

> Просто интересно было узнать правильно я делаю или нет
Блин. А что такое "правильно"?


 
Думкин ©   (2007-01-08 12:45) [8]

> Chort ©   (08.01.07 12:37) [6]

Тоды надо так:

function Div2(a : real):real;
begin
      Result := a/2
end;

function Mult(a,b : real):real;
begin
      Result := a * b
end;

function Sabc(a, b:real): Real;
begin
Result := Div2(Mult(a,b),2)
end;

procedure TForm1.ActExecute(Sender: TObject);
var
a,b,S:real;
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
S:= Sabc(a,b);
Label38.Caption:=FloatToStr(S);
end;


 
Chort ©   (2007-01-08 13:02) [9]


> А что такое "правильно"?

То что рациональнее.

А  [8] - это уже извращение(притом двойка лишняя в function Sabc).


 
Чапаев ©   (2007-01-08 13:07) [10]

> [9] Chort ©   (08.01.07 13:02)
В том случае, о котором ты спросил, рациональнее всего [3]. А решения, которое будет лучшим во всех абсолютно задачах, просто не существует.


 
Аноним   (2007-01-08 13:08) [11]

Если ты ее всего в одном месте кода вызываешь, то выносить в виде отдельной функции смысла нет


 
vrem   (2007-01-08 13:10) [12]

Если хотя бы два раза надо вызвать - имеет смысл отдельной процедурой, ну ещё если нравятся процедуры.


 
Чапаев ©   (2007-01-08 13:13) [13]

> [12] vrem   (08.01.07 13:10)
В любом случае можно процедурой. Надо только поразмыслить, делать ли её inline. ;-)


 
Sha ©   (2007-01-08 13:19) [14]

> Chort ©   (08.01.07 11:56)  

Когда пишешь поделку-однодневку, то все равно.
А когда большой проект, нетленку к которую будешь потом долго сопровождать,
то первый вариант предпочтительней.
Идеально, если вся содержательная обработка отделена от взаимодействия с пользователем.


 
Думкин ©   (2007-01-08 13:25) [15]

> Chort ©   (08.01.07 13:02) [9]

Да 2-ку упустил. :( А что значит рациональнее и почему это там - извращение?


 
Anatoly Podgoretsky ©   (2007-01-08 13:32) [16]

> Чапаев  (08.01.2007 11:58:01)  [1]

С какой стати меньше места?


 
Чапаев ©   (2007-01-08 13:58) [17]

> [16] Anatoly Podgoretsky ©   (08.01.07 13:32)
Ну... Код функции в памяти хранится в единственном экземпляре, если вычисление функции подставлять везде, где она нужна, то одинаковых участков кода будет несколько. Нет?


 
Chort ©   (2007-01-08 14:34) [18]


> Да 2-ку упустил. :( А что значит рациональнее и почему это
> там - извращение?

Рациональнее - самый простой выбор решения, А извращение - уж сильно много функций, в которых одна из другой выплывает.


 
try   (2007-01-08 14:56) [19]

правильно - значит рациональнее, рациональнее - значит проще, проще - значит правильнее.


> Chort ©


В чём смысл, брат?


 
Chort ©   (2007-01-08 15:13) [20]


> В чём смысл, брат?

Проще -не всегда значит правильнее. Так что смысл сохраняется!


 
try   (2007-01-08 15:23) [21]


> Chort ©   (08.01.07 15:13) [20]
> Проще -не всегда значит правильнее. Так что смысл сохраняется!


А что же значит "проще"?


 
MsGuns ©   (2007-01-08 17:36) [22]

Не имеет смысла создавать тучу функций, которые выполняют одно-два действия, если нет особой в этом необходимости.
Кроме того, олюъявление переменных без надобности не только раздувает код, но и делает его менее читабельным.
Убивает такой подход:

function MultStrings(s1,s1: string): string;
var
 i,j,k: extended;
begin
 i := StrToFloat(s1);
 j := StrToFloat(s2);
 k := i*j;
 result := FloatToStr(k);
end;


 
Чапаев ©   (2007-01-08 17:41) [23]

> Убивает такой подход
Зато при отладке спасает. (Ну, конечно, не такая тривиальщина)



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

Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.045 c
2-1168494921
Сергей И
2007-01-11 08:55
2007.01.28
Помогиет по БД!


2-1168548362
greengeneral
2007-01-11 23:46
2007.01.28
Как мне поменять кодировку


2-1167477111
inkvizitor
2006-12-30 14:11
2007.01.28
анимэ


15-1168013190
Petr V. Abramov
2007-01-05 19:06
2007.01.28
посоветуйте компонент


11-1145617791
netsend
2006-04-21 15:09
2007.01.28
KOL plugins





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский