Zastanawiałem się, jak zająć się projektowaniem literału „idealnego” zakresu, gdybym zaprojektował język. Dla tych, którzy nie znają literału zakresu w instrukcji reprezentującej zakres wartości, np. 1-4. Są najczęściej używane w pętlach for / foreach
Wydaje się, że należy wziąć pod uwagę kilka kwestii
Obsługa przedziałów włączających i wyłącznych, przypisywanie +1 lub -1 do punktów końcowych wydaje się nieco nieporadne i podatne na błędy.
Obsługa stopniowania, dzięki czemu można na przykład ustawić zakres liczb parzystych lub nieparzystych
Czytelność, powinno być oczywiste, co opisuje literał zakresu
Jednoznaczność, powinno być całkowicie niedwuznaczne, co opisuje literał zakresu
Domyślnie powinna to być wartość od włączającej do wyłącznej, ponieważ w większości przypadków używa się jej do zapętlania tablic itp.
Tak czy inaczej, jednym z przykładów literału zakresu, jaki widziałem, jest Ruby, który ma postać 1..3 dla wyłącznego (na końcu) zakresu i 1 ... 3 dla włącznie (na końcu). Możesz także wykonać 1..10. krok (5). Po dokładnym rozważeniu znalazłem jednak kilka rzeczy, które nie podobały mi się w tym podejściu (z mojej ograniczonej znajomości rubinu)
Możesz opisać tylko i wyłącznie na koniec. Opisywanie większości scenariuszy wydaje się nieco niespójne.
Różni się tylko o dodatkowy. wydaje się być przepisem na utrudnienie sprawdzenia, czy dany zakres jest włączający, czy wyłączny. Nie wiem o tobie, ale kropki stają się czasem rozmazane :)
Dodanie metody takiej jak notacja dla zakresów wydaje się mieszać pojęcie literału z pojęciem klasy, co wydaje się nieco niespójne (nawet jeśli zakresy zostaną skompilowane do klasy)
W każdym razie po rozważeniu różnych alternatyw. Wymyśliłem to
- [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
i tak dalej. Podoba mi się, ponieważ [normalnie denonuje zestaw i ten rodzaj pasuje do tego, nawet jeśli byłoby to inaczej niż zestaw.
Jedną z rzeczy, które mnie trochę podrażniają, jest wprowadzenie obowiązkowych wskaźników wykluczających / włączających, tj. Jeśli napiszesz tylko 1..5, domyślnie wyniesie 1,2,3,4, ponieważ jest to najczęstszy przypadek z tablicami itp. Jest łatwiejszy i bardziej czytelny, ale mniej konkretny, a gdybyś musiał napisać [1..5 [wcześnie] dowiadujesz się, jak działają.
Jak myślisz, czy obejmowałem większość baz, przeoczyłem coś? czy uczyniłbyś [] obowiązkowym? Czy projektowałbyś literały zasięgu inaczej w swoim języku programowania?
Kandydaci
- styl nawiasu: [0..10 [ , z krokiem: [0..5..20 [
- notacja interwałowa: [0..10) z krokiem: [0..5..20)
- wykrzyknik na wyłączność. 0 ..! 10, z krokiem: 0..5 ..! 20
- z innym krokiem. 0 ..! 20, 5
- sprawiłoby to, że domyślna * 0..10 ' włącznie
- wordy: [0 do! 20 na 5]
Muszę powiedzieć, że moim ulubionym do tej pory pod względem estetycznym jest 0 ..! 10 i 0..5 ..! 20 , chciałbym tylko, aby domyślna wartość 0..10 obejmująca wyłącznie była bardziej logiczna
1,5,10,15,20
Luka 4, 5, 5, 5 ?!