공식 답변
가시성을 높이기 위해 Mads Torgersen 의 C # 8 블로그 게시물 에서이 디자인 결정에 대해 설명합니다 .
우리는 시작부터 끝까지의 산술에 관해서 파이썬을 따르기로 결정했습니다. 0
첫 번째 요소 (항상 ^0
그러함 )와 "길이"요소, 즉 끝에서 오른쪽 요소를 지정합니다 . 이렇게하면 요소의 위치와 시작 위치가 길이와 같은 간단한 관계를 얻을 수 있습니다. x
인은 ^x
당신이 수학을 직접 수행했던 경우는 길이에서 제외했을 것입니다.
왜 -
새 모자 ( ^
) 연산자 대신 빼기 ( )를 사용하지 않습니까? 이것은 주로 범위와 관련이 있습니다. 파이썬과 대부분의 업계와 마찬가지로, 우리는 범위가 처음에는 포함되고 끝에는 독점적이기를 원합니다. 범위가 끝까지 가야한다고 말하는 지수는 무엇입니까? C #에서는 대답이 간단합니다. 끝에서 끝까지 x..^0
갑니다 x
. 파이썬에는 당신이 줄 수있는 명시적인 인덱스 -0
가 없습니다 : 0
첫번째 요소와 같기 때문에 작동하지 않습니다 ! 따라서 파이썬에서는 끝까지가는 범위를 나타 내기 위해 끝 색인을 완전히 꺼 두어야합니다 x..
. 범위의 끝이 계산되면에 나오는 경우를 대비하여 특별한 논리가 있어야합니다 0
. 마찬가지로 x..-y
, 어디y
계산되어 나왔습니다 0
. 이것은 일반적인 성 가시고 버그의 원인입니다.
마지막으로, 인덱스와 범위는 .NET / C #의 첫 번째 클래스 유형입니다. 그들의 행동은 그들이 인덱서에 적용되거나 심지어 인덱서에 사용되는 것에 묶여 있지 않습니다. 당신은 완전히 지수와 소요 다른 소요 자신의 인덱서를 정의 할 수 있습니다 Range
- 우리는 예를 들어, 그러한 인덱서를 추가하는 겁니다 Span
. 그러나 예를 들어 범위를 취하는 메소드를 가질 수도 있습니다.
내 대답
나는 이것이 우리가 사용하는 고전적인 구문과 일치한다고 생각합니다.
value[^1] == value[value.Length - 1]
0을 사용하면 두 구문을 나란히 사용할 때 혼동됩니다. 이런 식으로 인지 부하 가 낮습니다 .
파이썬과 같은 다른 언어도 같은 규칙을 사용합니다.
[beginInclusive, endExclusive)
. 일반적인 규칙입니다.