used trend tendencies programming program popular paid most languages language best programming-languages syntax operators

programming languages - trend - Soporte de idioma para operadores de comparación encadenados(x<y<z)



trend programming language 2018 (5)

Creo que ICON es el idioma original para tener esto, y en ICON queda fuera de la forma en que los booleanos se manejan como etiquetas especiales de "falla" con todos los demás valores tratados como verdaderos.

Se publicó una question sobre los operadores de comparación encadenados y cómo se interpretan en diferentes idiomas.

Los operadores de comparación de cadenas significan que (x < y < z) se interpretaría como ((x < y) && (y < z)) lugar de como ((x < y) < z) .

Los comentarios sobre esa pregunta muestran que Python, Perl 6 y Mathematica son compatibles con los operadores de comparación de cadenas, pero ¿qué otros idiomas admiten esta función y por qué no es más común?

Un vistazo rápido a la documentación de Python muestra que esta característica ha sido desde al menos 1996. ¿Hay alguna razón por la que más idiomas no hayan agregado esta sintaxis?

Un lenguaje tipado estáticamente tendría problemas con la conversión de tipo, pero ¿existen otras razones por las que esto no sea más común?


Debería ser más común, pero sospecho que no lo es porque hace que los lenguajes de análisis sean más complejos.

Beneficios:

  • Sostiene el principio de la menor sorpresa.
  • Lee como se enseña matemáticas
  • Reduce la carga cognitiva (ver 2 puntos anteriores)

Inconvenientes:

  • La gramática es más compleja para el lenguaje.
  • Azúcar sintáctico caso especial

En cuanto a por qué no, mis conjeturas son:

  • El (los) autor (es) de idioma no lo pensó
  • Está en la lista ''Es bueno tener''
  • Se decidió que no era lo suficientemente útil para justificar la implementación.

El beneficio es demasiado pequeño para justificar la complicación del lenguaje.

No lo necesita tan a menudo, y es fácil obtener el mismo efecto limpiamente con algunos caracteres más.


La comparación encadenada es una característica de BCPL, desde finales de los años sesenta.


Scheme (y probablemente la mayoría de los otros lenguajes de la familia Lisp) admite la comparación múltiple de manera eficiente dentro de su gramática:

(< x y z)

Esto puede considerarse una aplicación de función ordinaria de la función < con tres argumentos. Ver 6.2.5 Operaciones numéricas en la especificación.

Clojure soporta comparaciones encadenadas también.