언어를 디자인하려면 "완벽한"범위 리터럴을 디자인하는 방법에 대해 생각했습니다. 1-4와 같이 값의 범위를 나타내는 명령문에서 범위 리터럴을 모르는 경우 for / foreach 루프에서 가장 일반적으로 사용됩니다.
고려해야 할 몇 가지 문제가있는 것 같습니다.
포괄적이고 배타적 인 범위에 대한 지원, 엔드 포인트에 +1 또는 -1을 적용하는 것은 약간 애매하고 오류가 발생하기 쉽습니다.
스테핑 지원, 예를 들어 짝수 또는 홀수의 범위를 만들 수 있습니다
가독성, 범위 리터럴이 설명하는 내용을 쉽게 알 수 있어야합니다.
확실성, 범위 리터럴이 설명하는 것은 완벽하게 명확해야합니다.
대부분의 경우 배열을 반복하는 등의 이유로 사용되므로 기본값은 아마도 포함에서 배타적이어야합니다.
어쨌든, 내가 본 범위 리터럴의 한 가지 예는 루비입니다. 루비는 독점적 인 (끝) 범위는 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을 포함하는 포괄적 인
- wordy : [0에서! 20까지 5]
나는 지금까지 내가 가장 좋아하는 aestically가 0 ..! 10 및 0..5 ..! 20 이라고 말해야 합니다. 포괄적 인 배타적 인 기본 0..10 이 더 논리적 이기를 바랍니다.
1,5,10,15,20갭 4, 5, 5, 5 ?!