среда, 11 ноября 2009 г.

Правильное использование временной переменной в цикле foreach


Классический перловый foreach цикл:

Вариант 1:
foreach my $element ( @list ) {
    #some code    
}

Вариант 2:
my $element;
foreach $element ( @list ) {
    #some code    
}

Сравнение:
Большинство, не задумываясь, используют первый вариант... и это правильно :). Но есть "программисты-оптимизаторы", которые используют второй вариант, аргументируя это тем, что он "быстрее" (забивая на то, что они засоряют пространство имен родительского блока). Не слушайте их!!! Первый вариант на 40% быстрее!!! (в атаче бенчмарк; хотя, естественно, чистое время перебора элементов может занимать меньше 1% времени обработки элементов )
Многих этот факт может удивить но все объясняется следующим образом: перл просто не использут предварительно  объявленую вами переменную и объявляет свою с таким же именем.

Попробуйте сами:
my $element = "NOT_USED";
foreach $element ( 1..2 ) {
    #some code
}
print $element; #выведет "NOT_USED";

0 коммент.:

Отправить комментарий

Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)