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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.051 c
6-1156611573
1519
2006-08-26 20:59
2007.01.28
Подключение к интернету


15-1167484573
Slider007
2006-12-30 16:16
2007.01.28
С днем рождения ! 30 декабря


15-1168192918
Tirael
2007-01-07 21:01
2007.01.28
как включить HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Curren


15-1168264073
Spaller
2007-01-08 16:47
2007.01.28
Компилятор паскаля


15-1167919316
1111
2007-01-04 17:01
2007.01.28
AutoCAD