¿Por qué se llama 'último' 'último' en Perl?
-
06-07-2019 - |
Pregunta
¿Cuál es la razón histórica de que last
se llame así en Perl en lugar de break
como se llama en C?
El diseño de Perl fue influenciado por C (además de awk, sed y sh - vea la página del manual a continuación), por lo que debe haber algún razonamiento detrás de no ir con el familiar nombre en estilo C de break / last.
Un poco de historia de la página de manual de Perl 1.000 (publicada el 18 de diciembre de 1987):
[Perl] combina (en la opinión del autor, de todos modos) algunas de las mejores características de C, sed, awk y sh, por lo que las personas familiarizadas con esos lenguajes deberían tener poca dificultad. (Los historiadores del lenguaje también notarán algunos vestigios de csh, Pascal e incluso BASIC | PLUS).
Solución
La semántica de 'break' o 'last' es definido por el idioma (en este caso Perl), no por ti.
¿Por qué no pensar en 'último' como " esto es la última declaración para correr por el bucle " ;.
Siempre me ha parecido extraño que el La instrucción 'continuar' en 'C' inicia el siguiente paso de un bucle. Esto es definitivamente un uso extraño de la concepto de "continuar". Pero es el semántica de 'C', así que lo acepto.
Al intentar mapear particular conceptos de programación en soltero Palabras inglesas con significado existente siempre habrá algún tipo de rareza incompatible
Además, Larry Wall es un poco raro. ¿Has visto su foto?
(fuente: wired.com )
Otros consejos
Espero que esto se deba a que Perl fue creado por un lingüista, no un informático. En el uso normal del inglés, el concepto de declarar que ha completado su pasada final a través de un bucle está más fuertemente conectado con la palabra "último". (" este es el último pase ") que a la palabra " break " (" break el bucle " ;? " break fuera del bucle " ;? - ni siquiera está claro cómo '' break '' se relaciona con salir del bucle) .
El término 'último' tiene más sentido cuando recuerda que puede usarlo con algo más que el control de bucle inmediato. Puede aplicarlo a bloques etiquetados uno o más niveles arriba el bloque en el que se encuentra:
LINE: while( <> ) {
WORD: foreach ( split ) {
last LINE if /^__END__\z/;
...
}
}
Se lee más naturalmente para decir '' último '' en inglés cuando lo lees como " última línea si coincide ... ''.
Hay una razón adicional que puede considerar:
Último hace más que solo control de bucle.
sub hello {
my ( $arg ) = @_;
scope: {
foo();
bar();
last if $arg > 4;
baz();
quux();
}
}
El último como tal es un mecanismo de control de flujo general no limitado a bucles. Si bien, por supuesto, puede generalizar lo anterior como un bucle que se ejecuta como máximo 1 veces, la ausencia de un bucle para mí indica `` ¿Romper? ¿De qué estamos saliendo? & Quot;
En cambio, pienso en " last
" como " Salta a la posición del last brace " ;, que es para este propósito, más semánticamente sensible.
Estaba haciendo la misma pregunta a Damian Conway sobre say
. Perl 6 presentará say
, que no es más que print
que agrega automáticamente una nueva línea. Mi pregunta era por qué no simplemente usar echo
, porque esto es lo que echo
hace en Bash (y probablemente en otros lugares).
Su respuesta fue: echo
es 33% más largo que say
.
Él tiene un punto allí. :)
Porque va al último del bucle. Y porque Larry Wall era un tipo extraño.