Перед тем, как продолжить философские размышления о природе моей любви к паскалю, хочу, пока не забыл, поделиться свежим примером эволюции быдлокодера в тру-программера: прямо сейчас вы увидите живой пример рефакторинга кода, то бишь улучшения его внутреннего строения и логики без изменения функционирования программы.
Есть такой участок кода:
Смысл вычисления поля CurrentYear должен быть понятен: в зависимости от даты приоритета и текущей даты определяется год действия патента.
Сразу в глаза бросается почти дублирующийся участок кода в двух методах, связанных с вычислением однородных полей в разных таблицах базы данных. Во втором методе уже сразу приведен пример рефакторинга: вместо вложенных и ненаглядных условных операторов использован один с применением логического ИЛИ и логического И. Этот метод рефакторинга называется консолидация условного выражения. Применяем его и в первом методе:
Теперь вспоминаем, что чудесный редактор исходного кода в Lazarus уже позволяет автоматически использовать некоторые методы рефакторинга. Простейший из них - выделение метода, - реализуется очень легко из контекстного меню. Выделяем участок кода, который хотим извлечь в самостоятельную процедуру, и находим в меню нужный пункт:
Поскольку нам нужно возвратить итоговое значение, делаем не процедуру, а функцию (причем lazarus сам определил, какой тип значения и с каким названием нужно вернуть), присваиваем понятное имя функции и жмём "извлечь":
Приводим её в божеский вид: все локальные переменные одного типа собираем вместе, а также дополняем функцию передаваемым в неё исходным значением, которое она будет обрабатывать. Именно через него мы в последствии сможем вызывать функцию из всех методов вычисления однородных полей разных таблиц.
Заменяем ненужный теперь код вызовом новой функции в первом методе:
Делаем то же со вторым, а заодно удаляем ненужную теперь локальную переменную, и, вуаля, получаем красивейший код, состоящий из одной строки и там, и там :-)
Вывод: читайте, дети, книжку Мартина Фаулера "Рефакторинг", почерпнёте много полезного. И правильная картинка вместо унылого котика в начале будет теперь такая: