Ho pensato a come progettare la gamma "perfetta" letterale se progettassi 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 utilizzati nei cicli for / foreach
Sembra che ci siano un paio di problemi da tenere in considerazione
Il supporto per range inclusivi ed esclusivi, virando su +1 o -1 agli endpoint sembra un po 'fugly ed incline all'errore.
Supporto per stepping, in modo da poter creare un intervallo di numeri pari o dispari, ad esempio
Leggibilità, dovrebbe essere immediatamente evidente ciò che l'intervallo letterale descrive
Inequivocabile, dovrebbe essere perfettamente inequivocabile ciò che la gamma descrive letteralmente
Il valore predefinito dovrebbe probabilmente essere compreso tra inclusivo ed esclusivo poiché è quello che viene utilizzato nella maggior parte dei casi per il looping su array, ecc.
Ad ogni modo, un esempio di intervallo letterale che ho visto è Ruby che ha la forma di 1..3 per un intervallo esclusivo (alla fine) e 1 ... 3 per l'inclusione (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 limitata conoscenza del rubino)
Puoi solo descrivere inclusivo ed esclusivo per la fine. Mentre descrive la maggior parte degli scenari sembra un po 'incoerente.
Variando di solo un ulteriore. sembra una ricetta per rendere difficile capire se una gamma è inclusiva o esclusiva. Non ti conosco ma Dot tende a diventare qualcosa di sfocato :)
L'aggiunta di un metodo come la notazione per intervalli sembra mescolare la nozione di letterale con quella di una classe che sembra un po 'incoerente (anche se gli intervalli vengono compilati in una classe)
Comunque, dopo aver riflettuto su diverse alternative. Ho pensato a 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 denota un set e questo tipo si adatta a quello, anche se questo in contrasto con un set sarebbe ordinato.
Una cosa di cui sono un po 'sconvolto è rendere obbligatori o meno gli indicatori esclusivi / inclusivi, ovvero se scrivi solo 1..5 il valore predefinito sarebbe 1,2,3,4 poiché è il caso più comune con gli array, ecc. È più facile e più leggibile, ma meno specifico e se dovessi scrivere [1..5 [impari presto su come funzionano.
Cosa ne pensi, ho coperto la maggior parte delle basi, trascurato qualcosa? renderebbe [] obbligatorio? Progetteresti letterali di gamma in modo diverso nel tuo linguaggio di programmazione?
I candidati
- stile parentesi: [0..10 [ , con step: [0..5..20 [
- notazione intervallo: [0..10) con passaggio: [0..5..20)
- esclamativo per esclusivo. 0 ..! 10, con passaggio: 0..5 ..! 20
- con passi diversi. 0 ..! 20, 5
- tuttavia, ciò renderebbe il valore predefinito * 0..10 ' incluso-compreso
- wordy: [da 0 a! 20 per 5]
Devo dire che il mio preferito esteticamente finora è 0 ..! 10 e 0..5 ..! 20 , vorrei solo che l'impostazione predefinita 0..10 su inclusiva esclusiva fosse più logica
1,5,10,15,20
Spazio 4, 5, 5, 5 ?!