Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  16:24[Войти] | [Зарегистрироваться]
Обсуждение темы:
Можно, но не нужно.


Последнее время я не программирую, а рaзгpебаю зaвалы которые оставили до меня покoления программистов. Чтобы внести минимальное декоративное изменение требуется исправить несколько модулей и потратить несопоставимую по сложности работу по выискиванию всех мест, в которые надо внести изменения.
Дело в том, что тем методы, которые допустимы в примерах, олимпиадах и лабах по программированию, совершенно неприемлемы при создании крупных и долгоживущих прикладных программ.
Предлагаю в этой теме публиковать примеры, как не надо программировать на Delphi, что бы потом не было мучительно больно от встречи с теми, кто исправлял твой код.

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 421 сообщение

Добавить свое сообщение

Отслеживать это обсуждение
<<<... | 191—182 | 181—172 | 171—162 | ...>>>
Всего сообщений в теме: 421; страниц: 43; текущая страница: 25


№ 181   14-04-2008 07:11 Ответить на это сообщение Ответить на это сообщение с цитированием
Навеяно обсуждением в »вопрос КС №61249«

Вот что я действительно не люблю (именно на уровне чувств), так это конструкции вида

  while true do
    begin
    // ...
    if SomeCondition then Break;
    // ...
    end;


или

  repeat
    // ...
    if SomeCondition then Break;
    // ...
  until false;


Когда человек реализует такое через GOTO, то он, как бы, явно признается, что не сумел правильно спроектировать цикл. А здесь, вроде бы, все правильно написано: честный цикл вместо "запрещенного" GOTO. А смысл остается тот же самый: человек не сумел правильно спроектировать цикл.
 Geo


№ 180   20-03-2008 06:08 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 179« (Cepгей Poщин)
___________________________

А можно DFM хранить в той же БД. Про это, если я ничего не путаю, еще Толик Тенцер писал в конце 1990-х гг.


№ 179   20-03-2008 05:59 Ответить на это сообщение Ответить на это сообщение с цитированием
Что-то не в ту степь нас занесло...
Попробую сформулировать еще одну распространенную концептуальную ошибку.
Допустим есть в БД таблица, которую надо заполнять из формы (допустим с гридом, навигатором, статусной панелью). Прежде чем привычным движением вызывать пункт меню "New Form", и лихорадочно "кидать батоны", подумайте: неужели все формы в вашем проекте настолько уникальны, что их необходимо создавать с нуля. Даже если в вашей БД только одна таблица, через год их может стать 10. В результате будем иметь кучу форм всех цветов и размеров, в каждой форме увековечена неповторимая индивидуальность каждого программиста. Допустим решили добавить параметр запуска приложения (типа readonly), попробуйте переправьте весь этот зверинец, так, что бы при наличии этого параметра нельзя было редактировать все данные. Ну допусти даже переправили, а ваш последователь разумееся и знать не будет об этом параметре и опять создаст новую форму без такой возможности.

Бывает и другая крайность:
Создаётся одна форма редактирования справочника на все случаи жизни в которой меняется только имя таблицы, всё вроде бы нормально пока процесс редактирования абсолютно однотипный, но с течением времени для разных таблиц появятся разные исключения, особенности, дополнения (типа если поле A = 1, то поле Б = 2 и недоступно для редактирования), получаем монструальный модуль содержащий огромное количество проверок "Если в таблице XXX есть поле A, то..."

Есть еще гибридный вариант сочетающий в себе всё худшее из первых двух:
Одна форма, на которой лежит 10 гридов (один поверх другого), 10 DataSet`ов и т.д., в зависимости от каких-то условий одно скрывается, другое отображается. 10 поколений программеров  тщетно пытались разобраться, в результате приляпали что-то от себя со словами "не дыши, а то всё развалится".

Резюме:
Создайте один общий предок, наделите его общей функциональностью, по мере необходимости расширяйте её, все остальные формы создавайте на основе этой формы "New...".
Его же можно добавить в репозитарий (пункт контектного меню IDE "Add to Repository"), и использовать в новых проектах.
 Cep


№ 178   20-03-2008 04:02 Ответить на это сообщение Ответить на это сообщение с цитированием
Не скажу, как делать это на Делфи, но на Си++ очень даже можно отслеживать изменения версии классов, хидеров и реализаций с помощью #define version или static unsigned int version(). Это может быть полезно, чтобы автоматом исключать ошибки сборки (юнит тестов и прочего) как следствие экономить время, а также контролировать версии зависимостей. Так часто бывать так: автор применил изменения, а проблемы в использующий его классах проявились через некоторое время.


№ 177   19-03-2008 08:43 Ответить на это сообщение Ответить на это сообщение с цитированием
можно, но не нужно (даже нельзя) так

sqrt((x1-x2)*(x1-x2),(x1-x2)*(x1-x2))


а правильно так

hypot((x1-x2),(y1-y2))



№ 176   Удалено модератором


№ 175   05-03-2008 07:00 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 174« (ДДВ)
___________________________

if (i.ToString().Length == 1)
Это еще что. Гораздо интереснее проверять переменную на истинность:
if (b.ToString().Length < 5)


№ 174   05-03-2008 06:41 Ответить на это сообщение Ответить на это сообщение с цитированием
Википедия:
Индусский код — в самом общем случае, это криво написанный код. Однако на самом деле, под индусским кодом подразумевают код, написанный наиболее неочевидным и неестественным из всех возможных способов. Именно этим он и отличается от быдлокода, который хотя бы капельку очевиден.
По другой трактовке, индусский код — жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste», «главное завалить — а там запинаем», «шапкозакидательство». Так же известен как «write only», или (в пику принципу «написано однажды — читается везде») — «написанное однажды — лучше не читать».[

Пример индусского кода (С#)
uint i;

if (i.ToString().Length == 1)
{
...
}
Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i >= 0 && i < 10. Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется ее длина. Если число отрицательное — длина строки минимум 2 символа. /* тип uint не может быть отрицательным */ Если число больше 9 — аналогично, 2 символа. Проверку проходят лишь числа от 0 до 9.
Алгоритм ресурсоемок, неочевиден и не поддается сопровождению даже теоретически.

(читал тут: http://www.sql.ru/forum/actualthread.aspx?bid=9&tid=532694)


№ 173   28-02-2008 10:56 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 172« (Mirage)
___________________________
Не, ну хелперы вот это хорошо


№ 172   28-02-2008 08:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 171« (bems)
___________________________

Вообще тут нужен обероновский WITH, и я даже вписал это в кодгировский опрос (еще прошлогодний), но пока что в язык ничего полезного не добавили, если не считать тупейших foreach и т.п.


<<<... | 191—182 | 181—172 | 171—162 | ...>>>
Всего сообщений в теме: 421; страниц: 43; текущая страница: 25


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования