Ich habe darüber nachgedacht, wie ich das "perfekte" Bereichsliteral entwerfen würde, wenn ich eine Sprache entwerfen würde. Für Sie, die kein Bereichsliteral in einer Anweisung kennen, die einen Wertebereich wie 1-4 darstellt. Sie werden am häufigsten in for / foreach-Schleifen verwendet
Es scheint ein paar Probleme zu geben, die man berücksichtigen sollte
Die Unterstützung für inklusive und exklusive Bereiche, das Anheften von +1 oder -1 an Endpunkte, scheint etwas umständlich und fehleranfällig zu sein.
Unterstützung für das Steppen, sodass Sie beispielsweise eine Reihe von geraden oder ungeraden Zahlen erstellen können
Lesbarkeit sollte leicht ersichtlich sein, was das Bereichsliteral beschreibt
Eindeutigkeit, es sollte absolut eindeutig sein, was das Bereichsliteral beschreibt
Die Standardeinstellung sollte wahrscheinlich von inklusive bis exklusiv sein, da dies in den meisten Fällen zum Durchlaufen von Arrays usw. verwendet wird.
Ein Beispiel für ein Bereichsliteral, das ich gesehen habe, ist Ruby, das in Form von 1..3 für einen exklusiven Bereich (am Ende) und 1 ... 3 für inklusive (am Ende) vorliegt. Sie können auch 1..10.Schritt (5) ausführen. Nach sorgfältiger Überlegung fand ich jedoch einige Dinge, die mir an diesem Ansatz nicht gefallen haben (aufgrund meiner begrenzten Kenntnisse über Rubin).
Sie können nur inklusive und exklusiv für das Ende beschreiben. Während die meisten Szenarien beschrieben werden, scheint es ein wenig inkonsistent zu sein.
Variiert nur um einen zusätzlichen. scheint ein Rezept zu sein, um schwer zu erkennen, ob ein Sortiment inklusive oder exklusiv ist. Ich weiß nichts über dich, aber Punkte neigen dazu, etwas verschwommen zu werden :)
Das Hinzufügen einer Methode wie der Notation für Bereiche scheint den Begriff eines Literal mit dem einer Klasse zu vermischen, was etwas inkonsistent erscheint (selbst wenn Bereiche zu einer Klasse kompiliert werden).
Wie auch immer, nachdem ich über verschiedene Alternativen nachgedacht habe. Ich habe mir das ausgedacht
- [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
und so weiter. Ich mag es, weil [normalerweise ein Set denoniert und dies irgendwie dazu passt, obwohl dies im Gegensatz zu einem Set bestellt werden würde.
Eine Sache, über die ich ein bisschen hin und her gerissen bin, ist, die exklusiven / inklusiven Indikatoren obligatorisch zu machen oder nicht, dh wenn Sie nur 1..5 schreiben, wäre der Standardwert 1,2,3,4, da dies der häufigste Fall bei Arrays usw. Ist Es ist einfacher und lesbarer, aber weniger spezifisch, und wenn Sie schreiben müssen [1..5 [, lernen Sie früh, wie sie funktionieren.
Also, was denkst du, habe ich die meisten Grundlagen abgedeckt, etwas übersehen? Würden Sie das [] obligatorisch machen? Würden Sie Bereichsliterale in Ihrer Programmiersprache anders gestalten?
Kandidaten
- Klammerstil: [0..10 [ , mit Schritt: [0..5..20 [
- Intervallnotation: [0..10) mit Schritt: [0..5..20)
- Ausruf für exklusiv. 0 ..! 10, mit Schritt: 0..5 ..! 20
- mit anderem Schritt. 0 ..! 20, 5
- Dies würde jedoch die Standardeinstellung * 0..10 ' inklusive-inklusive machen
- wortreich: [0 bis! 20 mal 5]
Ich muss sagen, dass mein bisheriger ästhetischer Favorit 0 ..! 10 und 0..5 ..! 20 ist. Ich wünschte nur, die Standardeinstellung 0..10 für inklusive-exklusiv wäre logischer
1,5,10,15,20Lücke 4, 5, 5, 5?!