言語を設計する場合、「完全な」範囲リテラルを設計する方法を考えていました。1〜4のように、値の範囲を表すステートメント内の範囲リテラルがわからない場合。それらはfor / foreachループで最も一般的に使用されます
考慮すべきいくつかの問題があるようです
包括的および排他的範囲のサポート、エンドポイントへの+1または-1の付加は、少しあいまいでエラーが発生しやすいようです。
ステッピングのサポート。たとえば、偶数または奇数の範囲を作成できます。
読みやすさ、範囲リテラルが何を説明しているかはすぐにわかるはずです
あいまいさはありません。範囲リテラルが何を表すかは完全に明確でなければなりません
デフォルトはおそらく包括的から排他的であるべきです。それは、配列のループなどでほとんどの場合に使用されるものだからです。
とにかく、私が見た範囲リテラルの1つの例は、Rubyです。これは、排他的な(最後の)範囲の場合は1..3、包括的(最後の)の場合は1 ... 3の形式です。1..10.step(5)を実行することもできます。慎重に検討した結果、そのアプローチについて私が気に入らない点がいくつか見つかりました(ルビに関する私の限られた知識から)
あなたは終わりのために包括的で排他的にのみ記述することができます。ほとんどのシナリオを説明していますが、少し矛盾しているように見えます。
追加だけで変化します。範囲が包括的であるか排他的であるかをわかりにくくするためのレシピのようです。私はあなたのことは知りませんが、ドットはぼやけたものになる傾向があります:)
範囲の表記法のようなメソッドを追加すると、リテラルの概念とクラスの概念が混ざったように見えます(クラスがクラスにコンパイルされた場合でも)
とにかく、別の選択肢を考えた後。これを思いついた
- [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
など。私はそれが好きです。なぜなら、セットとは対照的にこれが注文されるとしても、通常はセットをデノネートし、これはちょっとそれに適合するからです。
私が少し引きずっているのは、排他的/包括的インジケーターを必須にするかどうかです。つまり、1..5とだけ書いた場合、配列の最も一般的なケースであるため、デフォルトは1,2,3,4になります。 。簡単で読みやすくなりますが、具体性は低く、[1..5 []と書かなければならない場合は、それらがどのように機能するかについて早期に学びます。
それで、あなたはどう思いますか、私はほとんどの拠点をカバーしました、何か見落としましたか?[]を必須にしますか?プログラミング言語で範囲リテラルを別の方法で設計しますか?
候補者
- ブラケットのスタイル:[0..10 [ 、ステップと: [0..5..20 [
- 間隔表記:[0..10) ステップを有する:[0..5..20)
- 排他的な感嘆。0 ..!10、ステップあり:0..5 ..!20
- 別のステップで。0 ..!20、5
- しかし、それはデフォルト*になるだろう0..10'包括的、包括的に
- 語句:[0から!20 by 5]
私はaestically私のお気に入りは、これまでであることを言わなければならない0 ..!10と20 ..!0..5私は単にデフォルトたい、0..10包括排他的には、複数の論理だろう
1,5,10,15,20
ギャップ4、5、5、5 ?!