История изменений
Исправление outtaspace, (текущая версия) :
if ( ( none { $_ eq "STR_PISTOLS" or
$_ eq "STR_RIFLES" or
$_ eq "STR_LAUNCHERS" } @$categories ) or
( any { $_ eq "STR_CLIPS" } @$categories ) ) {
next;
}
У меня люто бомбит от такого кода, пришлось долго приходить в чувства.
В этом примере у нас статично условие, т.е. категории которые перечислены в none и any. Меняется только массив $categories. Если это так, то можно выделить хэш под категории из none и хэш под категории из any. Всё свести к поиску по хэшам, так мы избавимся от медленного громоздкого условия. Еще можно написать функцию, с правильным названием описывающим предметную область, возвращающая булево значение для $categories:
next unless tratata($categories)
Про мемоизацию пока забудем. Выше описано достаточно быстрое и простое решение.
my %tratata = map { $_ => 1 } @{ $categories };
if (exists $tratata{'STR_PISTOLS'}) {
...
}
if (exists $tratata{'STR_LAUNCHERS'}) {
...
}
Исходная версия outtaspace, :
if ( ( none { $_ eq "STR_PISTOLS" or
$_ eq "STR_RIFLES" or
$_ eq "STR_LAUNCHERS" } @$categories ) or
( any { $_ eq "STR_CLIPS" } @$categories ) ) {
next;
}
У меня люто бомбит от такого кода, пришлось долго приходить в чувства.
В этом примере у нас статично условие, те категории которые перечислены в none и any. Меняется только массив $categories. Если это так, то можно выделить хэш под категории из none и хэш под категории из any. Всё свести к поиску по хэшам, так мы избавимся от медленного громоздкого условия. Еще можно написать функцию, с правильным названием описывающим предметную область, возвращающая булево значение для $categories:
next unless tratata($categories)
Про мемоизацию пока забудем. Выше описано достаточно быстрое и простое решение.
my %tratata = map { $_ => 1 } @{ $categories };
if (exists $tratata{'STR_PISTOLS'}) {
...
}
if (exists $tratata{'STR_LAUNCHERS'}) {
...
}