«Именованные параметры» в Delphi

Иногда возникает ситуация, когда в функцию требуется передавать много различных параметров, но при этом необходимый набор этих параметров может сильно различаться. В таких случаях, для Delphi, как правило, есть несколько путей решения:
  1. Просто забить все возможные параметры в интерфейс функции.
  2. Сделать множество перегрузок функции на все случаи жизни.
  3. Передать параметры массивом.
  4. Воспользоваться обходным путём. Например, вынести параметры в класс и проставлять их перед вызовом функции.
Всё эти способы получаются довольно громоздкими в реализации и имеют массу недостатков. А самое главное, что над их реализацией необходимо думать в каждом конкретном случае отдельно — не существует простого общего решения.

В некоторых языках (Scala, Python, Ruby...) такой проблемы не стоит в принципе — там есть такая замечательная вещь как именованные параметры. В Delphi же приходится всегда следовать установленному порядку аргументов. Не спасают даже значения по-умолчанию (их не всегда можно применить из-за конфликта типов, к тому же их использование нередко приводит к путанице).

Однако, используя небольшую хитрость, в Delphi вполне можно написать, к примеру, вот так:

ProcessParams(Par('Param1', 'test') + Par('Param2', 38) + Par('Param3', 3.2));

При этом в функцию ProcessParams придёт массив из трёх записей, содержащих пару «имя — значение». Такая запись становится возможной благодаря модулю объёмом всего 40 строк:


Читать дальше →

Быстрейшая CMS на Delphi для IIS как ISAPI Extension

Почему вы пишите сайты на скриптах, вроде PHP? Я лично не понимаю. Я использую другой способ — ISAPI Extensions for IIS. Сейчас расскажу, почему.

image

ISAPI Extensions (расширения Web сервера) — простая DLL библиотека с парой функций, которые обрабатывают запрос пользователя к Web серверу и возвращают ответ. Точнее — одна функция, остальные служат для регистрации/разрегистрации DLL в рабочем процессе IIS.

Из этого следует, что, по сравнению с другими способами, такими, как скрипты, ISAPI Extensions выигрывают по:
1. Скорость работы. DLL загружается в рабочий процесс IIS и находится в памяти всегда, а не читается с диска при каждом обращении. Не требуется интерпретатор языка — код нативный и исполняется непосредственно процессором;
2. Функционал. Вы можете использовать любую другую DLL или любой вызов WinAPI. Теоретически возможно специально сформированным http запросом отформатировать флэшку;
3. Защищенность. Ваш код очень сложно проанализировать и понять, как взломать сайт — нативный код человеком плохо читается;
4. У вас есть нормальный отладчик во время разработки! Самый вкусный момент. Можете делать step-by-step trace, стэк и память доступны для анализа.
Читать дальше →