Eu tenho pensado em como eu iria projetar o literal "range" perfeito se eu fosse projetar uma linguagem. Para você que não conhece, saiba um literal de intervalo em uma declaração que representa um intervalo de valores, como 1 a 4. Eles são mais comumente usados em loops for / foreach
Parece haver alguns problemas que se deve levar em consideração
O suporte para intervalos inclusivos e exclusivos, alinhar com +1 ou -1 aos pontos de extremidade parece um pouco impreciso e propenso a erros.
Suporte para pisar, para que você possa fazer um intervalo de números pares ou ímpares, por exemplo
Legibilidade, deve ficar evidente o que o literal de intervalo descreve
Sem ambiguidade, deve ser perfeitamente sem ambiguidade o que o literal de intervalo descreve
O padrão provavelmente deve ser de inclusivo a exclusivo, já que é usado na maioria dos casos para fazer loop sobre matrizes etc.
De qualquer forma, um exemplo de literal de intervalo que eu vi é Ruby, que está na forma de 1..3 para um intervalo exclusivo (no final) e 1 ... 3 para inclusivo (no final). Você também pode executar 1..10.step (5). Após uma análise cuidadosa, encontrei algumas coisas que não gostei sobre essa abordagem (pelo meu conhecimento limitado de ruby)
Você só pode descrever inclusivo e exclusivo para o fim. Ao descrever a maioria dos cenários, parece um pouco inconsistente.
Variando por apenas mais um. parece uma receita para dificultar ver se um intervalo é inclusivo ou exclusivo. Eu não sei sobre você, mas os pontos tendem a se tornar um borrão :)
Adicionar método como notação para intervalos parece misturar a noção de literal com a de uma classe que parece um pouco inconsistente (mesmo que os intervalos sejam compilados em uma classe)
De qualquer forma, depois de ponderar diferentes alternativas. Eu vim com isso
- [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
e assim por diante. Eu gosto disso porque [normalmente desonra um conjunto e isso meio que se encaixa nisso, mesmo que isso em contraste com um conjunto seja ordenado.
Uma coisa que me deixa um pouco impressionado é tornar obrigatórios ou não os indicadores exclusivos / inclusivos, ou seja, se você escrever apenas 1..5, o padrão será 1,2,3,4, já que é o caso mais comum de matrizes, etc. É mais fácil e legível, mas menos específico e, se você tiver que escrever [1..5 [, aprenderá cedo sobre como eles funcionam.
Então, o que você acha, eu cobri a maioria das bases, negligencio alguma coisa? você tornaria o [] obrigatório? Você projetaria literais de intervalo de maneira diferente em sua linguagem de programação?
Candidatos
- estilo de colchete: [0..10 [ , com etapa: [0..5..20 [
- notação de intervalo: [0..10) com etapa: [0..5..20)
- exclamação por excludente. 0 ..! 10, com passo: 0..5 ..! 20
- com passo diferente. 0 ..! 20, 5
- no entanto, isso tornaria o padrão * 0..10 ' inclusivo inclusive
- prolixo: [0 a! 20 por 5]
Devo dizer que o meu favorito esteticamente até agora é 0 ... 10 e 0..5 ..! 20 , só desejo que o padrão 0..10 para inclusivo-exclusivo seja mais lógico
1,5,10,15,20
Lacunas 4, 5, 5, 5 ?!