linux - editar - ¿Por qué ''hasta'' existe?
editar tags mp3 linux (3)
¿Hay alguna razón por la que el comando until
se implementó en bash / shell (todavía no estoy seguro de cuál)? ¿Hay algo que no pueda hacer con una negación en una declaración de while
? ¿Es más rápido que usar la función NOT
CPU? - improbable ...
Bash lo admite porque se ajusta a POSIX, específicamente, IEEE Std 1003.1, Edición 2004 - Lenguaje de comandos de shell - El hasta bucle . La característica es anterior a GNU, y el repositorio bash
GNU la tiene desde el primer compromiso hace 21 años.
Como Guillaume también explica en otra respuesta , la razón detrás de la característica era (un intento equivocado) de legibilidad. Intentaron microgestionar cosas aquí porque el lenguaje shell inicialmente estaba dirigido a usuarios finales en lugar de programadores profesionales (como BASIC y SQL).
Sin embargo, una sintaxis tan redundante que hace exactamente lo mismo en la misma complejidad del código demostró ser más problemática de lo que vale : al proporcionar dos formas canónicas, en lugar de una, para una construcción de stock, en realidad perjudica la legibilidad en lugar de mejorarla e introducirla. decisiones innecesarias para hacer 1 . Es por eso que solo está presente en unos pocos idiomas diseñados alrededor de ese tiempo y también pretende ser "cercano al lenguaje natural", como Perl y Visual Basic.
Hoy en día, este enfoque ha evolucionado hacia el concepto de sintaxis de azúcar 2 : una construcción redundante solo se introduce si simplifica significativamente el código al reemplazar una construcción de placa de caldera completa que se usa con la frecuencia suficiente. C # es un buen ejemplo de esto.
1 "cuál usar aquí? Cambiarlo cuando cambio la condición o no? ¿Por qué me importa?" Desde mi experiencia, es lo mismo en los procedimientos y funciones de Pascal: recuerdo haber tenido que cambiar una subrutina entre estas dos veces al diseñar el código. Simplemente impone un trabajo redundante en el programador, perdiendo así su tiempo.
2 Limito el término aquí porque estoy expresando cosas desde el punto de vista de un diseñador de idiomas. Es más bien "lo que ahora se considera una buena sintaxis de azúcar". Desde el punto de vista de un diseñador de lenguaje, ningún otro SS efectivamente existe.
La razón de tal afirmación no es tanto técnica (de hecho, un while
invertido tendría el mismo significado) sino semántica.
until (condition) {do something}
puede estar más cerca del lenguaje natural que
while (not condition) {do something}
Esto es especialmente cierto cuando la condición en sí se expresa como negativa, ya que la lectura de múltiples negaciones no fluye tan claramente:
while (not not_connected) {}
vs until (not_connected) {}
.
Todo lo que puedes hacer con until
puede hacerse con while
. Su código puede ser 1 carácter más corto gracias a esta "optimización" y algunos intérpretes pueden ser un poco más rápidos, pero sería ridículamente insignificante en comparación con el resto del código.
Por lo que sé, esta declaración existe principalmente porque algunos idiomas lo tienen, por lo que es un poco más fácil de portar desde un idioma a bash. Pero a partir de hoy (2017) creo que la gran mayoría de los idiomas son compatibles con la declaración while
y muy pocos con el apoyo until
. Recomendaría usar exclusivamente while
que otros programadores que lean su código no pierdan tiempo preguntándose qué hace until
lo haga.
Por no mencionar que algunos idiomas tienen una sentencia de "mandato" que se ejecuta al final del ciclo (en lugar del principio), lo que generaría una confusión innecesaria.