Форум: "Прочее";
Текущий архив: 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.039 c