He estado pensando en cómo diseñar el rango literal "perfecto" si tuviera que diseñar un lenguaje. Para usted que no sabe, conozca un rango literal en una declaración que represente un rango de valores, como 1-4. Se usan más comúnmente en bucles for / foreach
Parece que hay un par de problemas que uno debe tener en cuenta
La compatibilidad con rangos inclusivos y exclusivos, agregar +1 o -1 a los puntos finales parece un poco fugosa y propensa a errores.
Soporte para pasos, por lo que puede hacer un rango de números pares o impares, por ejemplo
Legibilidad, debería ser evidente lo que describe el rango literal
No ambigüedad, debe ser perfectamente inequívoco lo que describe el literal de rango
El valor predeterminado probablemente debería ser de inclusivo a exclusivo, ya que eso es lo que se usa en la mayoría de los casos para realizar un bucle sobre matrices, etc.
De todos modos, un ejemplo de rango literal que he visto es Ruby, que tiene la forma de 1..3 para un rango exclusivo (al final) y 1 ... 3 para incluir (al final). También puedes hacer 1..10.paso (5). Después de una cuidadosa consideración, sin embargo, encontré un par de cosas que no me gustaron de ese enfoque (de mi conocimiento limitado de ruby)
Solo puede describir inclusivo y exclusivo para el final. Si bien describe la mayoría de los escenarios, parece un poco inconsistente.
Variando por solo un adicional. parece una receta para dificultar ver si un rango es inclusivo o exclusivo. No sé sobre ti, pero los puntos tienden a convertirse en algo borroso :)
Agregar un método como la notación para rangos parece mezclar la noción de un literal con la de una clase que parece un poco inconsistente (incluso si los rangos se compilan en una clase)
De todos modos, después de reflexionar sobre diferentes alternativas. Se me ocurrió esto
- [5..1] 5,4,3,2,1
- [1..5 [ 1,2,3,4
- ] 1..5] 2,3,4,5
- [ 0..5..20] 0,5,10,15,20
Etcétera. Me gusta porque [normalmente denota un conjunto y esto encaja un poco en eso, a pesar de que esto en contraste con un conjunto sería ordenado.
Sin embargo, una cosa que me preocupa un poco es hacer que los indicadores exclusivos / inclusivos sean obligatorios o no, es decir, si escribe solo 1..5, el valor predeterminado sería 1,2,3,4 ya que es el caso más común con matrices, etc. Es más fácil y más legible, pero menos específico y si tuvieras que escribir [1..5 [aprenderás temprano sobre cómo funcionan.
Entonces, ¿qué piensas, cubrí la mayoría de las bases, pasé por alto algo? ¿Harías obligatorio el []? ¿Diseñarías los literales de rango de manera diferente en tu lenguaje de programación?
Candidatos
- estilo de soporte: [0..10 [ , con paso: [0..5..20 [
- notación de intervalo: [0..10) con paso: [0..5..20)
- exclamación por exlusivo. 0 ..! 10, con paso: 0..5 ..! 20
- Con diferente paso. 0 ..! 20, 5
- sin embargo, eso haría que el valor predeterminado * 0..10 ' inclusive-inclusive
- prolijo: [0 a! 20 por 5]
Debo decir que mi favorito estéticamente hasta ahora es 0 ..! 10 y 0..5 ..! 20 , solo deseo que el 0..10 predeterminado a inclusivo-exclusivo sea más lógico
1,5,10,15,20Brecha 4, 5, 5, 5 ?!