J'ai réfléchi à la façon dont j'allais concevoir la gamme "parfaite" littérale si je devais concevoir une langue. Pour vous qui ne connaissez pas, connaissez un littéral de plage dans une instruction qui représente une plage de valeurs, comme 1-4. Ils sont le plus souvent utilisés dans les boucles for / foreach
Il semble qu'il y ait quelques problèmes à prendre en compte
Prise en charge de plages inclusives et exclusives, le virement de +1 ou -1 vers les points de terminaison semble un peu fugace et sujet aux erreurs.
Prise en charge de la progression, vous pouvez donc créer une plage de nombres pairs ou impairs, par exemple
Lisibilité, il doit être facile de voir ce que le littéral de plage décrit
Sans ambiguïté, il devrait être parfaitement sans ambiguïté ce que la gamme littérale décrit
La valeur par défaut devrait probablement être comprise entre inclusive et exclusive, car c'est ce qui est utilisé dans la plupart des cas pour boucler sur des tableaux, etc.
Quoi qu'il en soit, un exemple de littéral de plage que j'ai vu est Ruby qui est sous la forme de 1..3 pour une plage exclusive (à la fin) et 1 ... 3 pour une plage inclusive (à la fin). Vous pouvez également faire 1..10. étape (5). Après mûre réflexion, j'ai trouvé cependant quelques choses que je n'aimais pas dans cette approche (de ma connaissance limitée du rubis)
Vous pouvez seulement décrire inclusif et exclusif pour la fin. Tout en décrivant la plupart des scénarios, cela semble un peu incohérent.
Variant de seulement un supplémentaire. semble être une recette pour rendre difficile de voir si une gamme est inclusive ou exclusive. Je ne sais pas pour vous mais les points ont tendance à devenir flous :)
L'ajout d'une méthode comme la notation pour les plages semble mélanger la notion de littéral avec celle d'une classe qui semble un peu incohérente (même si les plages sont compilées dans une classe)
Quoi qu'il en soit, après avoir réfléchi à différentes alternatives. Je suis venu avec cette
- [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
et ainsi de suite. Je l'aime parce que [dénonce normalement un ensemble et cela s'intègre un peu à cela, même si cela contraste avec un ensemble serait commandé.
Une chose qui me déchire un peu, c'est de rendre les indicateurs exclusifs / inclusifs obligatoires ou non, c'est-à-dire que si vous écrivez juste 1..5, la valeur par défaut serait 1,2,3,4 car c'est le cas le plus courant avec les tableaux, etc. C'est plus facile et plus lisible, mais moins spécifique et si vous deviez écrire [1..5 [vous apprenez tôt comment ils fonctionnent.
Alors que pensez-vous, ai-je couvert la plupart des bases, oublié quelque chose? rendriez-vous le [] obligatoire? Souhaitez-vous concevoir des littéraux de plage différemment dans votre langage de programmation?
Candidats
- style de support: [0..10 [ , avec étape: [0..5..20 [
- notation d'intervalle: [0..10) avec étape: [0..5..20)
- exclamation pour exlusif. 0 ..! 10, avec pas: 0..5 ..! 20
- avec une étape différente. 0 ..! 20, 5
- cependant, cela rendrait la valeur par défaut * 0..10 ' inclusive-inclusive
- wordy: [0 à! 20 par 5]
Je dois dire que mon préféré est jusqu'ici 0 ..! 10 et 0..5 ..! 20 , je souhaite juste que le 0..10 par défaut inclusif-exclusif soit plus logique
1,5,10,15,20
Écart 4, 5, 5, 5?!