Comments 17
Простите, это Perl? Вы просто не указали язык, мне немного не понятно.
+1
ух-ты, автору кто-то проговорился про хеши.
Надеюсь, про объекты никто не скажет…
Надеюсь, про объекты никто не скажет…
+2
1. Не забывайте, что переданный функции хэш можно рассматривать и как массив; в вашем случае это будет намного оправданней. Вам будет более чем достаточно (и даже без глобальных переменных)
2. Если уж приводите всё к хэшу — используйте возможности, которые он предоставляет. Незачем добавлять лишние массивы, вредит и читаемости кода, и производительности.
Однако, в общем случае подобные вещи стоит сводить всё же к массивам — это проще, быстрее и надёжнее.
my ( $sub, $param ) = @_;
&{ $sub }( $param );
2. Если уж приводите всё к хэшу — используйте возможности, которые он предоставляет. Незачем добавлять лишние массивы, вредит и читаемости кода, и производительности.
my %hash = @_ ;
for my $name ( keys %hash ) {
print "Hello, $name!\n" x ( $hash{$name} || 1 );
}
Однако, в общем случае подобные вещи стоит сводить всё же к массивам — это проще, быстрее и надёжнее.
+3
Думаю, for лучше организовать так:
while(my($key,$value)=each(%hash))
В таком варианте нам внутри цикла не придётся вытаскивать каждый раз значение, а значит перлу не надо будет каждый раз делать поиск по хешу.
while(my($key,$value)=each(%hash))
В таком варианте нам внутри цикла не придётся вытаскивать каждый раз значение, а значит перлу не надо будет каждый раз делать поиск по хешу.
+2
Согласен с вами лишь отчасти. Если, к примеру, мы точно не знаем, сколько атрибутов и их «дополнительных значений» передается в функцию, то массивы использовать станет непросто. А так, да, естессна, массивы лучше.
0
Свести к массивам можно тогда, когда мы точно знаем сколько параметров нам передают. Ну или нам придется это считать и делать перебор массива через один элемент, что тоже весьма вредит читабельности кода.
0
Мощный язык Perl, но местами слишком непонятный для языка высокого уровня ^^
0
Во-первых, я не совсем понял какую задачу вы решаете своим примером.
Во-вторых, использовать глобальные переменные не совсем гуд. Такой подход как у вас (с объявлением our во внешнем по отношению к функции блоке) обычно используется для создания персистентных переменных.
А в-третьих, второй пример вообще тривиальный и используется во многих модулях для вызова функций. И вообще, рекомендуется в литературе для оформления вызовов функций так как сильно повышает читабельность кода.
Во-вторых, использовать глобальные переменные не совсем гуд. Такой подход как у вас (с объявлением our во внешнем по отношению к функции блоке) обычно используется для создания персистентных переменных.
А в-третьих, второй пример вообще тривиальный и используется во многих модулях для вызова функций. И вообще, рекомендуется в литературе для оформления вызовов функций так как сильно повышает читабельность кода.
0
UFO just landed and posted this here
Да, пожалуй, пример не совсем удачен, но цель была не написать программу, повторяющую код сколько угодно раз. Я всего лишь поделился небольшой мыслью или еще одним способом решить задачу. Очень рад, что вас это навело на раздумья, приятно. Жаль, что раздумья немного не в ту сторону, но это и моя вина, как полагаю — неконкретная статья получилась =)
+1
До конца не понял идею. Это попытка придумать шаблон инкапсуляции функций?
0
Sign up to leave a comment.
Perl. Функции. Передача параметров с дополнительными атрибутами