Tôi đã suy nghĩ về cách tôi sẽ thiết kế phạm vi "hoàn hảo" theo nghĩa đen nếu tôi thiết kế một ngôn ngữ. Đối với bạn mà không biết một phạm vi nghĩa đen trong một tuyên bố đại diện cho một phạm vi các giá trị, như 1-4. Chúng thường được sử dụng nhất trong các vòng lặp for / foreach
Dường như có một vài vấn đề người ta nên tính đến
Hỗ trợ cho các phạm vi bao gồm và độc quyền, việc xử lý +1 hoặc -1 đến các điểm cuối có vẻ hơi khó hiểu và có lỗi.
Hỗ trợ cho bước, vì vậy bạn có thể tạo một phạm vi số chẵn hoặc số lẻ chẳng hạn
Dễ đọc, nên dễ hiểu những gì phạm vi nghĩa đen mô tả
Không rõ ràng, nó nên hoàn toàn không tôn giáo những gì phạm vi nghĩa đen mô tả
Mặc định có lẽ nên từ bao gồm đến độc quyền vì đó là những gì được sử dụng trong hầu hết các trường hợp để lặp qua các mảng, v.v.
Dù sao, một ví dụ về phạm vi nghĩa đen mà tôi đã thấy là Ruby ở dạng 1..3 cho phạm vi độc quyền (ở cuối) và 1 ... 3 cho bao gồm (ở cuối). Bạn cũng có thể làm 1..10.step (5). Sau khi xem xét cẩn thận, tôi đã tìm thấy một vài điều tôi không thích về cách tiếp cận đó (từ kiến thức hạn chế về ruby của tôi)
Bạn chỉ có thể mô tả bao gồm và độc quyền cho cuối cùng. Trong khi mô tả hầu hết các kịch bản, nó có vẻ hơi không nhất quán.
Thay đổi chỉ bằng một bổ sung. có vẻ như là một công thức để làm cho nó khó khăn để xem liệu một phạm vi là bao gồm hay độc quyền. Tôi không biết về bạn nhưng dấu chấm có xu hướng trở nên mờ nhạt :)
Việc thêm phương thức như ký hiệu cho các phạm vi dường như trộn lẫn khái niệm nghĩa đen với nghĩa của một lớp có vẻ hơi không nhất quán (ngay cả khi các phạm vi được biên dịch thành một lớp)
Dù sao, sau khi cân nhắc các lựa chọn khác nhau. Tôi nghĩ ra cái này
- [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
và kể từ đó trở đi. Tôi thích nó bởi vì [thông thường từ chối một bộ và loại này phù hợp với điều đó, mặc dù điều này trái ngược với một bộ sẽ được đặt hàng.
Có một điều tôi hơi khó hiểu mặc dù có làm cho các chỉ số độc quyền / bao gồm có bắt buộc hay không, tức là nếu bạn chỉ viết 1..5 thì mặc định sẽ là 1,2,3,4 vì đây là trường hợp phổ biến nhất với mảng, v.v. Nó dễ dàng và dễ đọc hơn, nhưng ít cụ thể hơn và nếu bạn phải viết [1..5 [bạn học sớm về cách chúng hoạt động.
Vì vậy, bạn nghĩ gì, tôi đã bao gồm hầu hết các căn cứ, bỏ qua một cái gì đó? bạn sẽ làm [] bắt buộc chứ? Bạn sẽ thiết kế phạm vi chữ khác nhau trong ngôn ngữ lập trình của bạn?
Thí sinh
- kiểu khung: [0..10 [ , với bước: [0..5..20 [
- ký hiệu khoảng: [0..10) với bước: [0..5..20)
- cảm thán cho sự bao quát. 0 ..! 10, với bước: 0..5 ..! 20
- với bước khác nhau. 0 ..! 20, 5
- tuy nhiên, điều đó sẽ bao gồm mặc định * 0..10 '
- dài dòng: [0 đến! 20 by 5]
Tôi phải nói rằng về mặt thẩm mỹ yêu thích của tôi cho đến nay là 0 ..! 10 và 0..5 ..! 20 , tôi chỉ muốn mặc định 0..10 để bao gồm độc quyền sẽ hợp lý hơn
1,5,10,15,20
Khoảng cách 4, 5, 5, 5?!