할당 연산자는 왜 왼쪽에 할당합니까? 그것에 대해 생각하고 (프로그래머가

최근에 친구 프로그래밍을 가르치기 시작했습니다 (파이썬을 사용하고 있습니다). 변수 생성과 대입 연산자에 대해 논의하기 시작했을 때, 그녀는 오른쪽의 값이 왜 왼쪽이 아닌 왼쪽의 이름에 할당되는지 물었습니다. .

나는 그것이 자연스럽게 보였기 때문에 그것에 대해 너무 많이 생각하지 않았지만, 그녀는 왼쪽에서 오른쪽이 그녀에게 더 자연스럽게 보인다고 말했습니다. 그것이 대부분의 사람들이 자연 언어를 읽는 방식이기 때문입니다.

나는 그것에 대해 생각하고 (프로그래머가 재사용해야 할) 할당 된 이름이 왼쪽에 정렬되어 쉽게 표시되므로 코드를 훨씬 쉽게 읽을 수 있다고 결론지었습니다.

aligned = 2
on = 'foo' + 'bar' + 'foobar'
the = 5.0 / 2
left = 2 + 5

반대로 :

2 = aligned
'foo' + 'bar' + 'foobar' = on
5.0 / 2 = the
2 + 5 = right

# What were the names again...?

이제이 표준에 대한 다른 이유가 있는지 궁금합니다. 그 뒤에 역사가 있습니까? 아니면 이것이 좋은 옵션 인 기술적 인 이유가 있습니까 (컴파일러에 대해 많이 알지 못함)? 그리고 오른쪽에 할당 된 프로그래밍 언어가 있습니까?



답변

Dipa @paxdiablo. 초기 프로그래밍 언어는 수학자에 의해 작성되었습니다. 실제로는 모두 언어였습니다. 수학에서, 그녀의 독자적인 원칙에 의해 왼쪽에서 오른쪽으로 읽는 것은 그것이 작동하는 방식에 의미가 있습니다.

x = 2y-4.

수학에서는 다음과 같이 말합니다. x를 2y -4와 같게하십시오.

또한 대수 에서도이 작업을 수행합니다. 변수의 방정식을 풀면 풀고 자하는 변수를 왼쪽으로 분리합니다. 즉, y = mx + b;

또한 C 계열과 같은 전체 언어 계열에 특정 구문이 있으면 변경하는 데 비용이 많이 듭니다.


답변

BASIC가장 초기의 컴퓨터 언어 중 하나는 다음과 같은 “적절한”형식이었습니다.

10 LET AREA = HEIGHT * WIDTH

“H를 객체 높이로 설정”과 같이 변수를 지정하는 수학적 사고 방식과 일치합니다.

COBOL또한 그 COMPUTE진술 과 비슷했습니다 . 여러 가지 일을하는 것처럼 여러 언어를 통해 이루어진 결정은 단순히 임의의 결정일 수 있습니다.


답변

실제로, 오른쪽에 할당되는 프로그래밍 언어가 있습니다 : TI-BASIC ! 뿐만 아니라 할당 연산자로 ‘=’를 사용하지 않고 “STO”연산자로 알려진 화살표를 사용합니다.

예 :

5→A
(A + 3)→B
(A - B)→C

위의 예에서 세 개의 변수가 선언되고 값이 지정되었습니다. A는 5, B는 8, C는 -3입니다. 첫 번째 선언 / 할당은 ‘store 5 as A’로 읽을 수 있습니다.

TI-BASIC이 이러한 시스템을 할당에 사용하는 이유는 그것이 계산기의 프로그래밍 언어이기 때문이라고 생각합니다. TI 계산기의 “STO”연산자 는 숫자를 계산 한 후 일반 계산기 작업에 가장 많이 사용되었습니다 . 만약 사용자가 기억하고 싶은 숫자라면, “STO”버튼을 눌렀을 것이고, 계산기는 그들에게 이름을 물어볼 것입니다.

Sin(7 + Cos(3))
                    -.26979276
Ans→{variable name}
                    -.26979276

사용자는 원하는대로 변수 이름을 지정할 수 있습니다. 알파 잠금을 켜고 이름을 입력 한 다음 “STO”를 누르면 “Ans”키를 누르는 것이 정상적인 작업에는 너무 번거 롭습니다. TI-BASIC에서 모든 계산기 기능을 사용할 수 있으므로 다른 작업을 “STO”로 추가하여 동일한 작업을 수행 할 수는 없었지만 대부분의 다른 언어와 비교할 때 역전되었습니다.

(일화 : TI-BASIC은 내가 배운 첫 번째 언어 중 하나이므로 대학에서 Java를 처음 배울 때 LEFT에 배정하는 것이 독특하고 ‘뒤로’인 것처럼 느꼈습니다!)


답변

휴리스틱 스 1 : 언어를 디자인 할 때 어떤 일을하는 두 가지 이상의 가능한 방법에 직면 할 때 가장 일반적이고 가장 직관적 인 언어를 선택하십시오. 그렇지 않으면 Perl +로 끝납니다.

자, 그것은 어떻게 더 자연 스럽습니까 (적어도 영어 사용자에게는)? 우리가 영어로 글을 쓰거나 말하는 방법을 봅시다 :

Steven은 이제 10 살입니다 (10 살의 Steven과는 반대로). 나는 190 파운드 이상 무게를 (다 (190 파운드가 넘는 무게와 달리).

코드에서 :

steven = 10
i > 190

다음은 또한보다 자연스럽게 들립니다.

“메리가 18 세라면 사탕을 먹을 수 있습니다.” “만약 21 세 미만이라면 형제에게 데킬라를 부탁 할 것입니다.”

if (mary == 18) { ... }
if (i < 21) { ... }

보다:

“만약 18 세 메리라면 …” “21 세가 내 나이보다 크면 …”

이제 코드 :

if (18 == mary) { ... }
if (21 > i) { ... }

이것은 프로그래머 나 영어 사용자 모두에게 자연스럽지 않습니다. 문장은 yoda-speak처럼 들리며 코드는 yoda-conditions입니다. 이것들은 C ++에서 도움이 될 수 있지만 대부분의 사람들이 동의 할 것이라고 확신합니다. 컴파일러가 무거운 작업을 수행하고 요다 조건의 필요성을 완화시킬 수 있다면 인생은 조금 더 쉬울 것입니다.

물론 어떤 것에도 익숙해 질 수 있습니다. 예를 들어, 숫자 81은 다음과 같이 작성됩니다.

Eighty One (영어) Eighty and One (스페인어) One and Eighty (독일어).

마지막으로 4가 있습니다! = “그린 사과가 테이블에 놓여있다”는 러시아어의 24 가지 유효한 방법- ‘on’이 ‘table’과 함께 있어야한다는 점을 제외하고 순서 (거의)는 중요하지 않습니다. 예를 들어, 러시아어를 모국어로 사용하는 사람이라면 글을 쓰는지 a = 10또는 10 = a둘 다 똑같이 자연스러워 보이 더라도 신경 쓰지 않아도 됩니다.

언어학은 매혹적인 주제이지만, 저는 공식적으로 그것을 연구 한 적이 없으며 많은 언어를 모릅니다. 잘만되면 나는 충분한 반례를 제공했다.


답변

그것은 1950 년대에 FORTRAN으로 시작되었습니다. FORTRAN이 FORmula TRANslation의 약어 인 경우, 문제의 공식은 규칙에 따라 항상 왼쪽에 할당되는 간단한 대수 방정식입니다.

반면에 현대 COBOL은 영어와 비슷하고 오른쪽에 할당되었습니다 (주로!).

MOVE 1 TO COUNTER.
ADD +1 TO LINE-CNT.
MULTIPLY QTY BY PRICE GIVING ITEM-PRICE.

답변

@ diceguyd30이 지적했듯이 두 가지 표기법이 있습니다.

  • <Identifier> = <Value>식별자값이 되도록 함”을 의미합니다 . 또는 변수를 확장하려면 : 변수 식별자Value로 정의 (또는 재정의)하십시오 .
  • <Value> -> <Identifier>식별자에 저장”을 의미합니다 . 또는이를 확장하려면 : Identifier로 지정된 위치에 Value 를 입력하십시오 .

물론, 일반적으로 식별자를 말하면 실제로 L 값이 될 수 있습니다.

첫 번째 방법은 변수의 추상 개념을 따르고, 두 번째 방법은 실제 스토리지에 관한 것입니다.

첫 번째 방법은 할당이없는 언어에서도 일반적입니다. 또한 변수 정의 및 할당이 상대적으로 가까운 것을주의 <Type> <Identifier> = <Value><Identifier> = <Value>.


답변

이미 언급했듯이 모든 초기 컴퓨터 언어는 그렇게 잘 작동했습니다. 예를 들어 FORTRAN은 BASIC보다 몇 년 전에 나왔습니다.

대입 식의 왼쪽에 대입 된 변수를 갖는 것은 실제로 의미가 있습니다. 일부 언어의 경우 SAME NAME에 여러 가지 다른 오버로드 된 루틴이있을 수 있으며 다른 유형의 결과를 리턴합니다. 컴파일러가 할당 된 변수의 유형을 먼저 볼 수있게하여 어떤 오버로드 된 루틴을 호출할지 또는 정수에서 부동 소수점으로 변환 할 때 생성 할 암시 적 캐스트를 파악합니다. 약간 간단한 설명이지만 아이디어를 얻길 바랍니다.