Ho pensato a come avrei potuto progettare la gamma letterale "perfetta" se dovessi progettare un linguaggio. Per te che non conosci, conosci un intervallo letterale in un'istruzione che rappresenta un intervallo di valori, come 1-4. Sono più comunemente usati in / foreach loop
Sembra che ci siano un paio di problemi da tenere in considerazione
-
Supporto per inclusivo e gamme esclusive, virando su +1 o -1 ai punti finali sembra un po 'fugace e errorprone.
-
Supporto per lo stepping, quindi puoi fare una serie di numeri pari o dispari per esempio
-
Leggibilità, dovrebbe essere prontamente apparente ciò che la gamma letterale descrive
-
Unambiguity, dovrebbe essere perfettamente non ambizioso quale sia la gamma letterale descrive
-
L'impostazione predefinita dovrebbe essere da inclusiva ad esclusiva poiché è ciò che viene utilizzato nella maggior parte dei casi per il loop su array ecc.
Comunque, un esempio di range letterale che ho visto è Ruby che ha la forma di 1..3 per un range esclusivo (alla fine) e 1 ... 3 per l'inclusivo (alla fine). Puoi anche fare 1..10.step (5). Dopo un'attenta considerazione ho trovato comunque un paio di cose che non mi piacevano di quell'approccio (dalla mia conoscenza limitata del rubino)
-
Puoi descrivere solo inclusivo ed esclusivo per la fine. Mentre descrivendo la maggior parte degli scenari che fa sembra un po 'incoerente.
-
Variabile solo di un ulteriore. sembra una ricetta per farlo difficile vedere se un intervallo è incluso o esclusivo. Non lo so su di te ma i punti tendono a diventare qualcosa di sfocato:)
-
Aggiunta del metodo come notazione per le gamme sembrano mescolare la nozione di a letterale con quello di una classe che sembra un po 'incoerente (anche se gli intervalli vengono compilati in una classe)
Comunque, dopo aver riflettuto su diverse alternative. Mi sono inventato questo
- [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 così via. Mi piace perché [normalmente denomina un set e questo si inserisce in questo, anche se questo in contrasto con un set sarebbe stato ordinato.
Una cosa di cui mi sento un po 'lacerato è rendere obbligatori o meno gli indicatori esclusivi / inclusivi, ovvero se scrivi solo 1,5. il default sarebbe 1,2,3,4 poiché è il caso più comune con array, ecc. È più facile e più leggibile, ma meno specifico e se dovessi scrivere [1..5 [impari presto come funzionano.
Quindi cosa ne pensi, ho coperto la maggior parte delle basi, ho trascurato qualcosa? vuoi rendere [] obbligatorio? Progetteresti letterali di gamma in modo diverso nel tuo linguaggio di programmazione?
Candidati
- stile parentesi: [0..10 [, con passaggio: [0..5..20 [
- notazione intervallo: [0..10) con passaggio: [0..5..20)
- esclamativo per esclusivo. 0 ..! 10, con passaggio: 0..5 ..! 20
- con passo diverso. 0 ..! 20, 5
- tuttavia, renderebbe predefinito * 0..10 ' inclusive-inclusive
- wordy: [0 a! 20 di 5]
Devo dire che il mio preferito fino ad ora è 0 ..! 10 e 0..5 ..! 20 , desidero solo il predefinito 0..10 to inclusive-exclusive sarebbe più logico