Передача именованных параметров
Проблема
Требуется упростить вызов функции с несколькими параметрами, чтобы программист
помнил смысл параметров, а не порядок их следования.
Решение
Укажите имена параметров при вызове:
thefunc(INCREMENT => "20s", START => "+5m", FINISH => "+30m");
thefunc(START => "+5m", FINISH => "+30m");
thefunc(FINISH => "+30m");
thefunc(START => "+5m", INCREMENT => "15s");
Затем в подпрограмме создайте кэш, содержащий значения по умолчанию и массив пар:
sub thefunc {
my %args = (
INCREMENT => '10s',
FINISH => 0,
START => 0,
@_ # Список пар аргументов
);
if ($args{INCREMENT} =~ /m$/ ) { ..... }
}
Комментарий
Функции, аргументы которых должны следовать в определенном порядке, удобны для
небольших списков аргументов. Но с ростом количества аргументов становится труднее
делать некоторые из них необязательными или присваивать им значения по умолчанию.
Пропускать можно только аргументы, находящиеся в конце списка, и никогда — в начале.
Более гибкое решение — передача пар значений. Первый элемент пары определяет имя
аргумента, а второй — значение. Программа автоматически документируется, поскольку
смысл параметра можно понять, не читая полное определение функции. Более того,
программистам, использующим такую функцию, не придется запоминать порядок аргументов,
и они смогут пропускать любые аргументы.
Решение построено на объявлении в функции закрытого хэша, хранящего значения
параметров по умолчанию. В конец хэша заносится массив текущих аргументов, @_ — значения
по умолчанию заменяются фактическими значениями аргументов.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|