«Именованные параметры» в Delphi
Иногда возникает ситуация, когда в функцию требуется передавать много различных параметров, но при этом необходимый набор этих параметров может сильно различаться. В таких случаях, для Delphi, как правило, есть несколько путей решения:
В некоторых языках (Scala, Python, Ruby...) такой проблемы не стоит в принципе — там есть такая замечательная вещь как именованные параметры. В Delphi же приходится всегда следовать установленному порядку аргументов. Не спасают даже значения по-умолчанию (их не всегда можно применить из-за конфликта типов, к тому же их использование нередко приводит к путанице).
Однако, используя небольшую хитрость, в Delphi вполне можно написать, к примеру, вот так:
При этом в функцию ProcessParams придёт массив из трёх записей, содержащих пару «имя — значение». Такая запись становится возможной благодаря модулю объёмом всего 40 строк:
Читать дальше →
- Просто забить все возможные параметры в интерфейс функции.
- Сделать множество перегрузок функции на все случаи жизни.
- Передать параметры массивом.
- Воспользоваться обходным путём. Например, вынести параметры в класс и проставлять их перед вызовом функции.
В некоторых языках (Scala, Python, Ruby...) такой проблемы не стоит в принципе — там есть такая замечательная вещь как именованные параметры. В Delphi же приходится всегда следовать установленному порядку аргументов. Не спасают даже значения по-умолчанию (их не всегда можно применить из-за конфликта типов, к тому же их использование нередко приводит к путанице).
Однако, используя небольшую хитрость, в Delphi вполне можно написать, к примеру, вот так:
ProcessParams(Par('Param1', 'test') + Par('Param2', 38) + Par('Param3', 3.2));
При этом в функцию ProcessParams придёт массив из трёх записей, содержащих пару «имя — значение». Такая запись становится возможной благодаря модулю объёмом всего 40 строк:
Читать дальше →