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

Вниз

Неужели и вправду код функции должен поместится в экран?   Найти похожие ветки 

 
Miwa ©   (2004-03-16 11:17) [0]

Ну уж действительно "Общий вопросс" :о))
Дело в том, что "самообразовываясь самостоятельно", я раньше вообще не задумывался о такой, как я убедился, ВАЖНЕЙШЕЙ вещи, как проектирование программы. А тут пришлось - перед тем, как переписывать проект третий раз :о((.
Но дело сейчас в другом.
Пишу функцию для анализа текстовых данных и сохранения результатов оного в базу. В функции фигурирует десяток списков которые в процессе работы могут занимать мегабайт и более. Поэтому не хочется (как рекомендуют авторы статей) разбивать данную функцию (строчек 300-400 кода) на составляющие. Разве что передавать им адреса списков параметрами... Но есть ли смысл?


 
MU   (2004-03-16 11:27) [1]

можно экран побольше поставить или шрифт поменьше сделать


 
TUser ©   (2004-03-16 11:29) [2]

300-400 строчек кода - это много. Я стараюсь писать прогу, чтобы в каждой процедуре бало строчек 20-50. Если больше, да еще там куча вложенных циклов и условий - это плохо читается. Но каюсь - еще не одной приги не написал без хотя бы одной большой проц-ры. Сначала все они маленькие, а потом вырастают строчек до 200-300-400- и т.д. Но так лучше не делать.


 
Anatoly Podgoretsky ©   (2004-03-16 11:31) [3]

Неправда, размер функции может быть такой, что не поместится ни при каком разрешении на один экран.


 
Романов Р.В. ©   (2004-03-16 11:35) [4]


> Anatoly Podgoretsky

Неправда, ее можно переписать так что она поместится на экран даже при самом маленьком разрешении.


 
Jack128 ©   (2004-03-16 11:46) [5]

зависит от стиля. если писать так
var i,j,k: integer;
begin
 if i < 10 then begin
   ...
 end else if j > 20 then begin
   ...
 end else if k < 30 then begin
    ...
 end;
end; то может и можно уместить на один экран, я придпочитаю такой стиль

var
 i: integer;
 j: integer;
 k: integer;
begin
 if i < 10 then
 begin
   ...
 end
 else
 if j > 20 then
 begin
   ...
 end
 else
 if k < 30 then begin
    ...
 end;
end;
Сам понимаешь, это не способствует уменьшению размеров функций


 
Игорь Шевченко ©   (2004-03-16 11:46) [6]

Anatoly Podgoretsky ©   (16.03.04 11:31)
Романов Р.В. ©   (16.03.04 11:35)

Марксизм не догма, а руководство к действию.


 
Плохиш   (2004-03-16 11:49) [7]

>Jack128 ©   (16.03.04 11:46) [5]

Компилятору глубоко на<bip> (пардон, плевать) на ваш стиль, пока текст не содержит ошибок ;-)


 
miwa ©   (2004-03-16 11:49) [8]

> Романов Р.В. ©   (16.03.04 11:35) [4]
И что Вы посоветуете в приведенном случае? Например для 15"" монитора и разрешения 800 х 600? ;о))


 
Плохиш   (2004-03-16 11:52) [9]


> miwa ©   (16.03.04 11:49) [8]
> И что Вы посоветуете в приведенном случае? Например для
> 15"" монитора и разрешения 800 х 600? ;о))

А в чём проблема? Или скролингом пользоваться не умеете?


 
miwa ©   (2004-03-16 11:54) [10]

А текст, между прочем, такой как не понравился
>Jack128 ©   (16.03.04 11:46) [5].

>Плохиш   (16.03.04 11:49) [7]
Компилятору пофиг. А вам через полгода?


 
miwa ©   (2004-03-16 11:59) [11]

Плохиш   (16.03.04 11:52) [9]
> А в чём проблема? Или скролингом пользоваться не умеете?

Вопросс звучал так:
 Есть ли смысл разбивать большую (по размерам кода) фукнцию на несколько меньших, следуя рекомендациям авторов статей по оптимизации кода, так как сам впервые столкнулся с проектом, в котором надо все спланировать и продумать, а потом садится за клавиатуру. Спрашиваю потому, что переписываю программу уже третий раз и не хочется повторять этот процесс еще.


 
Плохиш   (2004-03-16 12:06) [12]

>miwa ©   (16.03.04 11:59) [11]

Изачальный вопрос вообще из серии "Что лучще вындовс или лыникс"
Но мы ешё не в "потрепаться"


 
Романов Р.В. ©   (2004-03-16 12:08) [13]


> miwa ©   (16.03.04 11:49) [8]
> > Романов Р.В. ©   (16.03.04 11:35) [4]
> И что Вы посоветуете в приведенном случае? Например для
> 15"" монитора и разрешения 800 х 600? ;о))

Я обычно пишу функции такого размера что бы они помещались у меня в голове. Если функция сложная и происходит переполнение мозга я делю ее на логические блоки и оформляю вложеными функциями.


 
Романов Р.В. ©   (2004-03-16 12:12) [14]

В основном во вложенные функции уходять сложные конструкции проверки условий или обработка во вложенных циклах.


 
Goida ©   (2004-03-16 12:13) [15]

Почему до сих пор не в ПОТРЕПАТЬСЯ???!!!


 
miwa ©   (2004-03-16 12:18) [16]

> Романов Р.В. ©   (16.03.04 12:08) [13], [14]
Спасибо. На такие ответы (советы?) я и ожидал.


 
Романов Р.В. ©   (2004-03-16 12:25) [17]

И еще, в обработчиках событый я стараюсь не писать код не связанный с данным контролом, а выностить его в отдельные процедуры и фунции.
Например:
procedure TfrmMain.acOpenBaseExecute(Sender: TObject);
begin
 if odBase.Execute then
 OpenBase(odBase.FileName);
end;

// Установка соединения с базой
procedure TfrmMain.OpenBase(FName: TFileName);
const
 _CS1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
 _CS2 = ";Persist Security Info=False";
begin
 if FileExists(FName) then
 begin
   dmBase.cnBase.ConnectionString := _CS1 + FName + _CS2;
   dmBase.cnBase.Connected := True;
   if not dmBase.cnBase.Connected then
     ShowMessage("Не удалось подключиться к базе")
   else
     SetLastFile(FName);
 end
 else
   ShowMessage("Файл не найден");
end;


 
Юрий Зотов ©   (2004-03-16 13:07) [18]

> Miwa

См. [6]. А от себя добавлю - код функции должен умещаться в ГОЛОВЕ, а не на экране. Никакие экраны и разрешения здесь вообще ни при чем.

Короче, функция должна представлять из себя ЛОГИЧЕСКИ автономную часть алгоритма, которая по общей логике программы выполняется НЕОДНОКРАТНО. И сколько в ней при этом строк, 20 или 200 - неважно. Разбивать ее на какие-то ОДНАЖДЫ вызываемые куски ТОЛЬКО ради сокращения числа строк совершенно незачем (то же самое можно получить, отделив эти куски пустыми строками или комментариями). Более того, даже если какой-то кусок кода выполняется и несколько раз, но всегда внутри ОДНОЙ функции, то не надо выносить его из этой функции, а надо сделать ее ВНУТРЕННЕЙ функцией. И все будет понятно, и все будет структурно.

И если следовать эти РАЗУМНЫМ, а не ФОРМАЛЬНЫМ правилам, то объем подавляющего большинства функций (а также средний объем функции) как раз и получается примерно таким, который называется "хороший стиль".


 
Algol   (2004-03-16 13:13) [19]

Из личного опыта:

При правильной структуризации программы большинство методов оказываются достаточно малого размера.
Но конечно бывают и тяжелые случаи, когда требуется в одном методе сделать много действий. Тогда стараюсь разбить его на малые подпроцедуры, а в самом методе пишу только вызовы подпроцедур, не вставляя никакого другого кода. Тогда суть выполняемых действий видна достаточно прозрачно.


 
Goida ©   (2004-03-16 13:17) [20]

Всё, что здесь написано имеет смысл соблюдать. Это точно. Но главное, как бы ты ни писал, всегда все нужно коментировать. И чем полнее, тем лучше. При хорошем коментировании код даже в 1000 строк страшен не будет.


 
Erik ©   (2004-03-16 13:30) [21]

Я всегда стараюсь писать небольшие функции, а если они разбушают, то делю на несколько честей. Если у нас слишком больная процедура , то ее обязательно надо разбить для повышения читаемости и повторного использования кода! 200-300 строк это недопустимо! У меня сердний размер 10-30 сторок. Стараюсь его придерживатся, если сразу невыходит то после переписываю.



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

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
14-1078843781
Dlorean
2004-03-09 17:49
2004.04.04
Полетела файловая система FAT32!


14-1078670557
В л а д и м и р
2004-03-07 17:42
2004.04.04
Delphi 6 и Exel


11-1058185200
Sagrer
2003-07-14 16:20
2004.04.04
Проблема с размером окна в XP.


6-1075194978
cherep
2004-01-27 12:16
2004.04.04
delphi и telnet


4-1074912216
Reals
2004-01-24 05:43
2004.04.04
Узнать выделенный текст в чужом окне.