Últimamente, he decidido comenzar a usar Perl::Critic con más frecuencia en mi código. Después de programar en Perl por casi 7 años, me he acostumbrado a la mayoría de las mejores prácticas de Perl durante mucho tiempo, pero sé que siempre hay margen de mejora. Sin embargo, una cosa que me ha estado molestando es el hecho de que Perl::Critic no le gusta la forma en que desempaqueco @_ para las subrutinas. A modo de ejemplo:¿Por qué a Perl :: Critic no le gusta usar shift para poblar variables de subrutina?
sub my_way_to_unpack {
my $variable1 = shift @_;
my $variable2 = shift @_;
my $result = $variable1 + $variable2;
return $result;
}
Ésta es la forma en que siempre lo he hecho, y, como su sido discutido en ambos PerlMonks y desbordamiento de pila, su not necessarily evil tampoco.
Cambiar el código anterior a ...
sub perl_critics_way_to_unpack {
my ($variable1, $variable2) = @_;
my $result = $variable1 + $variable2;
return $result;
}
... también funciona, pero me resulta difícil de leer. También he leído el libro de Damian Conway Perl Best Practices y realmente no entiendo cómo mi enfoque preferido para desempacar cae bajo su sugerencia de evitar el uso de @_
directamente, como lo implica Perl::Critic. Siempre he tenido la impresión de que estaba hablando de Conway maldad, tales como:
sub not_unpacking {
my $result = $_[0] + $_[1];
return $result;
}
El ejemplo anterior es mala y difícil de leer, y me volvería nunca jamás que no hacer que en un trozo de código de producción.
En resumen, ¿por qué el Perl::Critic considera que mi forma de preferencia es mala? ¿Estoy realmente cometiendo un crimen atroz desempaquetando usando shift?
¿Sería algo que personas que no sean yo piensen que debería plantearse con los mantenedores de Perl::Critic?
Supongo que a Perl :: Critic no le gusta porque funciona usando "magia", como 'shift' que opera en' @ _' cuando no se especifica ninguna variable. Aunque sería útil saber qué regla de Perl :: Critic quiere cambiar esto. – Powerlord
Como comentario adicional, si utiliza la lista de asignaciones, Komodo Edit/IDE puede indicarle los argumentos a una subrutina. –
Gracias Brad, no me di cuenta. Soy un usuario antiguo de ViM, por lo que generalmente ignoro lo que Komodo Edit está poniendo delante de mí, pero siempre me he preguntado cómo funcionó. – Weegee