Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уменьшение размеров кода, Уборка ненужных строк кода 
V
    Опции темы
Veve
Дата 7.12.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Существует следующая проблема. Есть большие участки кода которые повторяются по два раза... и различаются лишь в одной строчечке...
Что-то наподобие такого...:
Button1. Caption:='Text';
Button1.Left:=111;


.....



Button2. Caption:='Text';
Button2.Left:=111;



Ну только проблема не в Button, а более глабальная.... и код повторяется в гораздо больших маштабох....


К примеру в переменую perem  := TOrder(от чего-то там) ну и сней делаются всякие там штуки....
В таком же коде, отличающемся только одной строчкой в которой perem  := чё-то другое пресваивается и уже с этим делаются теже всякие штучки....

Хотелось бы избавиться от этого дубляжа...




Это сообщение отредактировал(а) Veve - 7.12.2006, 20:06
PM MAIL ICQ Skype MSN   Вверх
Romikgy
Дата 7.12.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

Procedure correct_(const i: integer);
var x:TButton;
  begin
    with TEdit(Form1.FindComponent('Button'+IntToStr(i))) do
begin
 Caption:='Text';
 Left:=111;
end;
   
    end;

имхо так

Это сообщение отредактировал(а) Romikgy - 7.12.2006, 20:23


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Veve
Дата 7.12.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Ну да с Buttonом там много существует решений, но как я ранее говорил проблемма не в Buttonaх.... 

Мои два обьекта совсем других типов....

Тоесть мне нужно работать с так называемой переменой x, но в одном случае это переменая и одного типа в другом дрогого
Код

Procedure First;
var x: [I]T1[/I];
  begin
    x:=Чё-то type T1;
    x.Caption:='La-la-la';
  end;  

Procedure Second;
var x: [I]T2[/I];
  begin
    x:=Чё-то type T2;
    x.Caption:='La-la-la';
  end;  

PM MAIL ICQ Skype MSN   Вверх
Rodman
Дата 7.12.2006, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

procedure TForm1.func(Sender: TObject);
begin
   Sender.Caption:='Text';
   Sender.Left:=111;
end;

...
func(Button1);

PM MAIL WWW Skype GTalk YIM MSN   Вверх
x77
Дата 7.12.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



Veve, слишком расплывчатый вопрос smile выше вам совершенно справедливо намекнули, что вынос общего кода в процедуры никто не отменял. если нужны более тяжеловесные, но более гибкие решения - да здравствуют наследование, полиморфизм и пр. а так - непонятно, что именно не получается?


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Alexeis
Дата 7.12.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Rodman, почти, только у TObject нет таких свойств лучше юзать более высокого предка, например,
TComponent, TControl, TWinControl, т.е. будет
Код

procedure TForm1.func(Sender: TObject);
begin
   (Sender as TControl).Left:=111;
end;

а вот с caption проблема, он появляется только у конечного класса.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 7.12.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Veve, а чего они у тебя разного типа, раз хранят суть одинаковую информацию?
если это классы, прицепи к ним интерфейсы.
если это "просто" переменные - можешь передавать указатель и индикатор типа(в виде целого числа), а внутри в зависимости от индикатора производить привдение типов
PM MAIL   Вверх
x77
Дата 7.12.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



alexeis1, можно написать свой класс, "делающий всякие штуки", от которого унаследовать классы, заточенные уже под конкретные задачи.

Добавлено @ 20:57 
вообще, в целом, есть всего два подхода: классический модульный, т.е. выделение общего кода в отдельные процедуры/модули, и ООП-шный. предпочтение того или иного зависят уже от конкретики решаемой задачи. если речь идёт только о том, чтобы изменить два свойства у двух контролов - писать свои классы, наверное, смысла нет. если о том, чтобы объеденить объекты с похожей логикой работы - то здесь, наверное, ООП - оптимум.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Alexeis
Дата 7.12.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



x77, можно, но тогда для удобства прийдется переписывать пол палитры компонентов, а потом еще их регистрировать. Мороки много... Иногда если задача не слишком сложная проще выкрутится smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
Дата 8.12.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Код

procedure TForm1.Button(Sender: TObject);
begin
 TButton(Sender).Caption:='Text';
 TButton(Sender).Left:=1111;
end;

Вот так выводить.
Код

Button(Button1);
Button(Button2);

Или в массив

Писал здесь могут быть ошибки.

Но это особо не уменьшит код я в своёи проекте где 5000 строк также делал оптимизацию все что болеш одного выносил в отдельную процедуру только запутался в конечном результате smile а толку экономия 50кб сам проект весил 870кб потом 820кб smile так что это особой выгоды не даст хотя и выглядит более крассиво smile 

Это сообщение отредактировал(а) ivan219 - 8.12.2006, 21:23
PM MAIL ICQ   Вверх
Veve
Дата 11.12.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Зато это позваляет избавиться от багов... Всем спасибо! 

Это сообщение отредактировал(а) Veve - 11.12.2006, 17:11
PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.