Tại sao toán tử gán gán gán cho phía bên trái?


47

Tôi mới bắt đầu dạy lập trình cho một người bạn mới đây (chúng tôi đang sử dụng Python) và khi chúng tôi bắt đầu thảo luận về việc tạo biến và toán tử gán, cô ấy hỏi tại sao giá trị bên phải được gán cho tên bên trái chứ không phải ngược lại .

Tôi đã không nghĩ về nó quá nhiều trước đây, bởi vì nó có vẻ tự nhiên đối với tôi, nhưng cô ấy nói rằng từ trái sang phải có vẻ tự nhiên hơn với cô ấy, vì đó là cách mà hầu hết chúng ta đọc ngôn ngữ tự nhiên.

Tôi nghĩ về nó và kết luận rằng nó làm cho mã dễ đọc hơn nhiều, vì các tên được gán cho (mà lập trình viên sẽ cần sử dụng lại) có thể dễ dàng nhìn thấy, được căn bên trái.

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

Như trái ngược với:

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

# What were the names again...?

Bây giờ tôi tự hỏi nếu có những lý do khác cho tiêu chuẩn này. Có một lịch sử đằng sau nó? Hoặc có một số lý do kỹ thuật tại sao đây là một lựa chọn tốt (tôi không biết nhiều về trình biên dịch)? Và có ngôn ngữ lập trình nào được gán cho phía bên phải không?


15
R có thể gán cho phía bên tay phải ( value -> variable).
Bạn

Có lẽ điều này là do tên biến xấu? Làm thế nào về 'numAlign là 2` và' gàLeft là 2 + 5 '?
Công việc

18
Có phải tên bạn của bạn ... Yoda?
Adrian

1
Nếu cô ấy bắt đầu sáng tác về điều này, tôi tự hỏi cô ấy sẽ làm gì khi nhìn thấy C ++ & co.
BlackBear

3
Xin lưu ý một chút: Khan Academy có một số bài học về Python dành cho lập trình viên mới bắt đầu: khanacademy.org/#computer-science và Google có một số bài nâng cao hơn: code.google.com/edu/lacular/google-python- class / set- up.html
lindon cáo

Câu trả lời:


56

Ditto @paxdiablo. Các ngôn ngữ lập trình ban đầu được viết bởi các nhà toán học - thực ra tất cả chúng đều như vậy. Trong toán học, theo nguyên tắc của riêng cô - đọc từ trái sang phải - nó có ý nghĩa trong cách nó hoạt động.

x = 2y - 4.

Trong toán học, bạn sẽ nói điều này: Đặt x bằng 2y -4.

Ngoài ra, ngay cả trong đại số bạn làm điều này. Khi bạn giải phương trình cho một biến, bạn cô lập biến bạn đang giải cho bên trái. tức là y = mx + b;

Hơn nữa, một khi toàn bộ họ ngôn ngữ - chẳng hạn như họ C - có một cú pháp nhất định, việc thay đổi sẽ tốn kém hơn.


19
@FarmBoy: trong toán học, bài tập và đẳng thức là điều tương tự, vì không có trình tự trong một công thức như có trong máy tính. (a bằng b và đồng thời b bằng a)
Petruza

1
@FB ngoại trừ trong một số ngôn ngữ chức năng gán đơn lẻ, ví dụ như Erlang. Chuyển nhượng và Đảm bảo sự bình đẳng giống như trong toán học
Peer Stritzinger

18
@Petruza Không, trong phân công toán học và bình đẳng không giống nhau. Nếu tôi nói 'Đặt x = 2y - 3' thì khác với 'Do đó x = 2y - 3'. Tôi toán, điển hình là phân biệt chúng. Vì bình luận tranh luận về tôi rất được hoan nghênh, tôi sẽ đề cập rằng tôi có bằng tiến sĩ. trong toán học, tôi khá chắc chắn về điều này.
Eric Wilson

2
Tôi không biết toán học ở bất cứ đâu gần Tiến sĩ, điều tôi nói là vì không có tính tuần tự, nên không có thứ tự thực hiện trong toán học cả trong một bài tập hoặc trong một đẳng thức, không giống như lập trình, trong đó cả hai mặt của một bài tập đều có thể khác nhau tại một số thời điểm, và cuối cùng họ bằng nhau tại một thời điểm khác. Nhưng trong toán học, trong một bài tập như let a be...không có thời gian, cả hai mặt của bài tập đều bằng nhau, vì vậy bài tập trên thực tế là một đẳng thức, không có gì lạ tại sao cả hai sử dụng cùng một dấu hiệu:=
Petruza

5
@Petruzza - nhưng có tính liên tục. Tài liệu toán học được viết từ đầu đến cuối, giống như bất kỳ tài liệu nào khác. Nếu tôi khẳng định x = 1trong chương một, nhưng khẳng định x = 2trong chương hai, đó không phải là một mâu thuẫn khủng khiếp - mỗi khẳng định chỉ áp dụng trong một bối cảnh nhất định. Sự khác biệt trong lập trình mệnh lệnh một phần là loại bỏ một rào cản (chúng ta không cần thay đổi bối cảnh), và một phần về việc thực hiện và tính hữu dụng.
Steve314

26

BASIC, một trong những ngôn ngữ máy tính sớm nhất có dạng "thích hợp" là:

10 LET AREA = HEIGHT * WIDTH

phù hợp với tư duy toán học về việc chỉ định một biến, như "Gọi H là chiều cao của đối tượng".

COBOLcũng tương tự với COMPUTEtuyên bố của nó . Như với nhiều cách làm, nó có thể chỉ đơn giản là một quyết định tùy tiện được đưa ra thông qua nhiều ngôn ngữ.


7
Tôi cho rằng hình thức này tự nhiên hơn khi các dòng chương trình được coi là "câu lệnh" trái ngược với "hoạt động". Như trong, I declare that X must equal THISthay vì tuyến tính hơnEvaluate THIS and store it in X
voithos

Đợi đã, BASIC là ngôn ngữ máy tính 'sớm'?
Alex Feinman

2
@Alex Xem xét rằng nó bắt đầu từ những năm 1960, tôi muốn nói rằng khá sớm.
Ben Richards

1
Mặt khác, trong COBOL bạn có thể viết MULTIPLY HEIGHT BY WIDTH GIVING AREA, do đó, biến nhận được kết quả nằm ở phía bên phải của câu lệnh.
user281377

25

Trên thực tế, có một ngôn ngữ lập trình gán cho phía bên phải: TI-BASIC ! Không chỉ vậy, nhưng nó cũng không sử dụng '=' làm toán tử gán, mà sử dụng một mũi tên được gọi là toán tử "STO".

ví dụ:

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

Trong ví dụ trên, ba biến đang được khai báo và đưa ra các giá trị. A sẽ là 5, B sẽ là 8 và C sẽ là -3. Khai báo / chuyển nhượng đầu tiên có thể được đọc 'lưu trữ 5 dưới dạng A'.

Về lý do TI-BASIC sử dụng một hệ thống như vậy để gán, tôi gán nó là bởi vì nó là ngôn ngữ lập trình cho máy tính. Toán tử "STO" trên máy tính TI thường được sử dụng nhất trong các hoạt động của máy tính thông thường sau khi một số được tính. Nếu đó là một số mà người dùng muốn nhớ, họ sẽ nhấn nút "STO" và trình tạo mã sẽ nhắc họ đặt tên (tự động kích hoạt khóa alpha để tổ hợp phím tạo ra các chữ cái thay vì số)

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

và người dùng có thể đặt tên cho biến bất cứ điều gì họ chọn. Phải bật khóa alpha, nhập tên, sau đó nhấn "STO" và nhấn phím "Ans" sẽ quá cồng kềnh đối với các hoạt động bình thường. Vì tất cả các chức năng của máy tính đều khả dụng trong TI-BASIC, không có toán tử gán nào khác được thêm vào khi "STO" thực hiện cùng một nhiệm vụ, mặc dù ngược lại khi so sánh với hầu hết các ngôn ngữ khác.

(Giai thoại: TI-BASIC là một trong những ngôn ngữ đầu tiên tôi học được, vì vậy khi tôi mới học Java ở trường đại học, tôi cảm thấy như việc gán cho LEFT là không bình thường và 'ngược'!)


+1 Tôi hoàn toàn quên mất điều đó! TI Basic cũng là ngôn ngữ đầu tiên của tôi, nhưng tôi không nhớ chi tiết này.
barjak

Trên thực tế, nhà điều hành STO gần hơn với cách thức hoạt động của máy và bất kỳ ngôn ngữ nào thực sự hoạt động. Giá trị đầu tiên được tính toán và sau đó được lưu trữ trong bộ nhớ.
Kratz

15

Heuristic 1: Khi phải đối mặt với nhiều hơn một cách có thể để làm một cái gì đó trong khi thiết kế một ngôn ngữ, hãy chọn một ngôn ngữ phổ biến nhất, trực quan nhất, nếu không bạn sẽ kết thúc với Perl +.

Bây giờ, làm thế nào nó tự nhiên hơn (ít nhất là với một người nói tiếng Anh)? Hãy xem cách chúng ta viết / nói những điều bằng tiếng Anh:

Steven bây giờ 10 tuổi (trái ngược với Steven 10 tuổi bây giờ). Tôi nặng hơn 190 pounds (trái ngược với hơn 190 pounds tôi nặng).

Trong mã:

steven = 10
i > 190

Sau đây cũng có vẻ tự nhiên hơn:

"Nếu Mary 18 tuổi, thì cô ấy có thể có kẹo". "Nếu tôi nhỏ hơn 21 yo, thì tôi sẽ nhờ anh trai tôi bằng tequila".

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

hơn:

"Nếu 18 yo Mary là ..." "Nếu 21 lớn hơn tuổi tôi ..."

Bây giờ mã:

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

Lưu ý rằng điều này không tự nhiên đối với cả lập trình viên cũng như người nói tiếng Anh. Các câu nghe giống như yoda-speak và mã có biệt danh là yoda-condition. Chúng có thể hữu ích trong C ++, nhưng tôi chắc chắn rằng hầu hết mọi người sẽ đồng ý: nếu một trình biên dịch có thể thực hiện công việc nặng nhọc và giảm bớt nhu cầu về điều kiện yoda, cuộc sống sẽ dễ dàng hơn một chút.

Tất nhiên, người ta có thể quen với bất cứ điều gì. Ví dụ, số 81 được viết là:

Tám mươi mốt (tiếng Anh) Tám mươi và một (tiếng Tây Ban Nha) Một và tám mươi (tiếng Đức).

Cuối cùng, có 4! = 24 cách nói hợp lệ "táo xanh nằm trên bàn" trong tiếng Nga - thứ tự (gần như) không thành vấn đề, ngoại trừ việc 'trên' phải đi cùng với 'bảng'. Vì vậy, nếu bạn là một người nói tiếng Nga bản địa (ví dụ), thì bạn có thể không quan tâm liệu một người viết a = 10hay 10 = abởi vì cả hai đều có vẻ tự nhiên như nhau.

Mặc dù ngôn ngữ học là một môn học hấp dẫn, tôi chưa bao giờ chính thức nghiên cứu nó và không biết nhiều ngôn ngữ đó. Hy vọng rằng tôi đã cung cấp đủ các ví dụ phản tác dụng.


4
... và trong tiếng Pháp, 81 được gọi là "bốn lần hai mươi mốt" ... :)
Martin Sojka

1
@Martin, tôi tin tiếng Đan Mạch rất giống nhau.
một CVn

7
@Martin Điều đó thực sự kỳ lạ, bởi vì bốn lần hai mươi mốt là 84.
Peter Olson

6
@Peter: bạn đã sai dấu ngoặc đơn của mình, đó là(four times twenty) one
SingleNegationElimination

4
@Job: Đọc "Nếu 18 yo Mary là ...", tôi chắc chắn đã nhắc nhở Yoda rằng "Khi chín trăm tuổi bạn đạt được, trông bạn có tốt không, hmm?" trong Return of the Jedi :-)
joriki

11

Nó bắt đầu với FORTRAN vào những năm 1950. Trong đó FORTRAN là tên viết tắt của FORmula TRANslation - các công thức trong câu hỏi là các phương trình đại số đơn giản mà theo quy ước luôn luôn gán cho bên trái.

Mặt khác, COBOL hiện đại của nó có nghĩa là giống tiếng Anh và được gán cho bên phải (chủ yếu!).

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

Tôi nghĩ rằng đây là ví dụ tốt nhất ở đây vì nó minh họa hoàn hảo một ngữ cảnh trong ngôn ngữ mà người nói tiếng Anh thông dụng có thể đọc được nhưng có sự phân công đúng. Tôi đang nói rằng điều đó quan trọng bởi vì số lượng lớn người nói bằng tiếng Anh, nó sẽ chỉ đọc từ trái sang phải để bài tập có ý nghĩa, điều này hoàn toàn không đúng.
Joshua Hedges

5

Chà, như @ diceguyd30 đã chỉ ra, có cả hai ký hiệu.

  • <Identifier> = <Value>có nghĩa là "hãy để Định danhGiá trị ". Hoặc để mở rộng điều đó: Xác định (hoặc xác định lại) Định danh biến thành Giá trị .
  • <Value> -> <Identifier>có nghĩa là "lưu trữ giá trị cho định danh ". Hoặc để mở rộng điều đó: Đặt Giá trị vào vị trí được chỉ định bởi Mã định danh .

Tất nhiên, nói chung, Mã định danh trên thực tế có thể là bất kỳ giá trị L nào.

Cách tiếp cận đầu tiên tôn vinh khái niệm trừu tượng của các biến, cách tiếp cận thứ hai là về lưu trữ thực tế.

Lưu ý rằng cách tiếp cận đầu tiên cũng phổ biến trong các ngôn ngữ, không có bài tập. Cũng lưu ý, định nghĩa biến và gán tương đối gần <Type> <Identifier> = <Value>so với <Identifier> = <Value>.


3

Như đã được đề cập, khá tốt tất cả các ngôn ngữ máy tính ban đầu hoạt động theo cách đó. Ví dụ FORTRAN, đã xuất hiện nhiều năm trước BASIC.

Nó thực sự có ý nghĩa rất lớn khi có biến được gán ở bên trái của biểu thức gán. Trong một số ngôn ngữ, bạn có thể có một số thói quen quá tải khác nhau với TÊN CÙNG, trả về các loại kết quả khác nhau. Bằng cách cho trình biên dịch nhìn thấy loại biến được gán trước, nó sẽ biết thói quen bị quá tải nào sẽ được gọi, hoặc diễn viên ngầm nào sẽ tạo khi chuyển đổi từ (ví dụ) một số nguyên sang float. Đó là một chút giải thích đơn giản, nhưng hy vọng bạn có ý tưởng.


2
Tôi hiểu lời giải thích của bạn, nhưng không phải trình biên dịch chỉ nhìn về phía trước cho đến khi kết thúc câu lệnh?
voithos

Điều đó có thể làm cho lexer đơn giản hơn trong các ngôn ngữ ngày nay, nhưng có bao nhiêu ngôn ngữ lập trình thậm chí còn hỗ trợ các phương thức được đặt tên, chứ đừng nói đến quá tải phương thức, khi loại cú pháp này là mới?
CVn

2
Xin chào @voithos. Vâng - trình biên dịch có thể nhìn về phía trước, nhưng đó có thể là một mức độ phức tạp không thể chấp nhận được trong những ngày đầu viết trình biên dịch - thường là trình biên dịch mã hóa bằng tay! Tôi nghĩ rằng việc đặt biến được gán ở bên trái là một lựa chọn thực dụng: dễ dàng hơn cho cả người và máy.
Dave Jewell

Tôi nghĩ rằng nó sẽ là tầm thường cho một nhiệm vụ để gán cho bên phải. Khi một biểu thức như 3 + 4 == 6 + 7, cả hai bên được đánh giá trước toán tử, bởi vì ngôn ngữ được định nghĩa đệ quy. Phần tử ngôn ngữ 'biến = biểu thức', có thể dễ dàng thay đổi thành 'biểu thức = biến'. Việc có gây ra tình huống mơ hồ hay không phụ thuộc vào phần còn lại của ngôn ngữ.
Kratz

@Kratz - điều đó chắc chắn đúng với trình biên dịch bây giờ, nhưng có thể có một vấn đề nhỏ đối với các ngôn ngữ được giải thích rất cũ hoạt động với nguồn mã thông báo. OTOH, điều đó có thể đã ưu tiên biến ở bên phải hơn là biến ở bên trái.
Steve314

3

Nó có thể là tàn dư của các thuật toán phân tích cú pháp sớm. Hãy nhớ rằng phân tích cú pháp LR chỉ được phát minh vào năm 1965 và cũng có thể là các trình phân tích LL đã gặp sự cố (trong giới hạn thời gian và không gian của các máy tại thời điểm đó) đi theo hướng khác. Xem xét:

identifier = function();
function();

Hai rõ ràng là rõ ràng từ mã thông báo thứ hai. Mặt khác,

function() = identifier;
function();

Không vui. Điều này trở nên tồi tệ hơn khi bạn bắt đầu lồng các biểu thức gán.

function(prev_identifier = expression) = identifier;
function(prev_identifier = expression);

Tất nhiên, dễ dàng hơn để định hướng cho máy móc cũng có nghĩa là dễ dàng hơn để định hướng cho con người. Một ví dụ dễ dàng khác là tìm kiếm khởi tạo của bất kỳ định danh cụ thể nào.

identifier1 = expressionOfAnArbitraryLength;
identifier2 = expressionOfAReallyReallyReallyArbitraryLength;
identifier3 = expression;
identifier4 = AlongLineExpressionWithAFunctionCallWithAssignment(
    identifier = expr);

Dễ dàng, chỉ cần nhìn lên phía bên trái. Mặt khác, mặt khác

expressionOfAnArbitraryLength = identifier1;
expressionOfAReallyReallyReallyArbitraryLength = identifier2;
expression = identifier3;
AlongLineExpressionWithAFunctionCallWithAssignment(expr = identifier
    ) = identifier4;

Đặc biệt là khi bạn không thể grepđấm thẻ, việc tìm định danh bạn muốn sẽ khó hơn nhiều.


Chính xác là điểm mà tôi đã nghĩ đến, vâng.
voithos

2

Các ngôn ngữ Asssugging có đích là một phần của opcode bên trái. Các ngôn ngữ cấp cao hơn có xu hướng tuân theo các quy ước của các ngôn ngữ tiền nhiệm.

Khi bạn nhìn thấy =(hoặc :=cho các phương ngữ Pascalish), bạn có thể phát âm chúng theo cách is assigned the valueđó, thì bản chất từ ​​trái sang phải sẽ có ý nghĩa (bởi vì chúng ta cũng đọc từ trái sang phải trong hầu hết các ngôn ngữ). Vì các ngôn ngữ lập trình chủ yếu được phát triển bởi những người đọc từ trái sang phải, các quy ước bị mắc kẹt.

Đó là một loại phụ thuộc đường dẫn . Tôi cho rằng nếu lập trình máy tính được phát minh bởi những người nói tiếng Do Thái hoặc tiếng Ả Rập (hoặc một số ngôn ngữ từ phải sang trái khác), thì tôi nghi ngờ chúng ta sẽ đặt đích đến bên phải.


Có, nhưng tôi nghi ngờ rằng văn bản trong các biên tập viên cũng sẽ được căn chỉnh đúng ...
voithos

8
Bạn không thể khái quát như thế về ngôn ngữ lắp ráp. Chúng khác nhau tùy theo vị trí toán hạng đích.
quick_now

2
@quickly_now: đúng; trên thực tế, hầu hết các ngôn ngữ máy nguyên thủy (thậm chí không phải là bộ lắp ráp theo tiêu chuẩn ngày nay) thậm chí không có đích đến, vì thường chỉ có một hoặc hai bộ tích lũy cho mục đích chung. hầu hết các hoạt động đều ngụ ý bộ tích là đích, ngoại trừ các opcode 'store', chỉ xác định địa chỉ bộ nhớ và không phải nguồn (là bộ tích lũy). Tôi thực sự không nghĩ rằng nó có ảnh hưởng đến cú pháp gán cho các ngôn ngữ giống ALGOL.
Javier

3
@Tangurena - Một số ngôn ngữ trình biên dịch có số mệnh ở bên trái. Không phải của opcode (đó là mã đối tượng được lắp ráp), mà là bên trái của danh sách đối số cho lệnh ghi nhớ. Tuy nhiên, những người khác có đích đến bên phải. mov.b #255, d0Ví dụ, trong 68000 trình biên dịch, bạn sẽ viết , nơi d0đăng ký để gán cho. Các trình biên dịch cũ hơn chỉ có một đối số duy nhất cho mỗi lệnh. Trong 6502 LDA #255(Bộ tích lũy tải), bạn có thể lập luận rằng cái Aở bên trái, nhưng nó cũng ở bên trái trong STA wherever(Bộ tích lũy cửa hàng).
Steve314

2
Và ngay cả Intel 4004 (tổ tiên cuối cùng 4 bit của gia đình 8086, với 8008 và 8080 ở giữa) đã được phát triển sau khi gán bằng ngôn ngữ cấp cao. Nếu bạn cho rằng loạt 8086 là đại diện cho những gì các nhà lắp ráp đã làm trong những năm 50 và trước đó, tôi rất nghi ngờ đó là sự thật.
Steve314

2

Đối với giá trị của nó, hầu hết các câu lệnh trong COBOL đều đọc từ trái sang phải, vì vậy hai toán hạng được đặt tên đầu tiên và đích đến cuối cùng, như : multiply salary by rate giving tax.

Tuy nhiên, tôi sẽ không đề xuất rằng học sinh của bạn có thể thích COBOL, vì sợ rằng tôi (hoàn toàn đúng) bị gắn cờ vì đã đưa ra một nhận xét thấp, không lịch sự, vô vị như vậy! :-)


1

cô ấy nói rằng từ trái sang phải có vẻ tự nhiên hơn đối với cô ấy, vì đó là cách mà hầu hết chúng ta đọc ngôn ngữ tự nhiên.

Tôi nghĩ đó là một lỗi sai. Một mặt, bạn có thể nói "gán 10 cho x" hoặc "di chuyển 10 đến x". Mặt khác, bạn có thể nói "đặt x thành 10" hoặc "x trở thành 10".

Nói cách khác, tùy thuộc vào sự lựa chọn của bạn của động từ, biến được gán cho có thể hoặc không phải là chủ ngữ và có thể hoặc không thể ở bên trái. Vì vậy, "điều gì là tự nhiên" chỉ phụ thuộc hoàn toàn vào sự lựa chọn từ ngữ theo thói quen của bạn để thể hiện sự phân công.


0

Trong mã giả, toán tử gán được viết rất phổ biến ở bên phải. Ví dụ

2*sqrt(x)/(3+y) -> z

Trong máy tính Casio, ngay cả các biến thể không lập trình được, biến gán cũng được hiển thị ở bên phải

A+2B → C

Trong Forth, biến cũng ở bên phải

expression variable !

Trong x86, cú pháp Intel có đích ở bên trái, nhưng cú pháp GAS đảo ngược thứ tự, gây ra một số nhầm lẫn cho nhiều người, đặc biệt là về các hướng dẫn liên quan đến thứ tự của các tham số như phép trừ hoặc so sánh. Các hướng dẫn này giống nhau ở 2 phương ngữ khác nhau

mov rax, rbx    ; Intel syntax
movq %rbx, %rax ; GAS syntax

Cả hai đều chuyển giá trị trong rbx sang rax. Không có ngôn ngữ lắp ráp nào tôi biết viết đích đến bên phải như GAS.

Một số nền tảng đặt biểu thức ở bên trái và biến ở bên phải:

MOVE expression TO variable      COBOL
expression → variable            TI-BASIC, Casio BASIC
expression -> variable           BETA, R
put expression into variable     LiveCode

https://en.wikipedia.org/wiki/Assocation_%28computer_science%29#Notation

Hầu hết các ngôn ngữ gán giá trị ở bên trái, một trong những lý do dễ căn chỉnh các toán tử, dễ đọc và nhận biết biến hơn, vì các toán tử gán và vị trí của biến sẽ không thay đổi nhiều trong các dòng và dễ đọc hơn "Hãy để biến là một số giá trị".

Tuy nhiên, một số người thích nói "di chuyển giá trị x sang y" và viết biến ở bên phải.


-1

Tôi nghĩ rằng nó theo một cách suy nghĩ hợp lý.
Trước tiên phải có một hộp (biến), sau đó bạn đặt một đối tượng (giá trị) bên trong nó.
Bạn không đặt vật thể lên không trung rồi đặt một cái hộp xung quanh nó.


2
vâng bạn làm trong hầu hết các ngôn ngữ, bên phải được đánh giá trước bên trái.
Javier

3
Đây là một loại điều "Lái xe bên phải đường". Có vẻ hợp lý nhưng chỉ vì đó là cách bạn đã luôn luôn làm điều đó. Tất cả các nước cao cấp lái xe bên trái.
James Anderson

1
@JamesAnderson quốc gia ưu việt? : o
nawfal

Bạn nói đúng, nó chỉ hợp lý cho một hệ thống chữ viết từ trái sang phải như bảng chữ cái La Mã, mà tôi đoán là được sử dụng bởi hầu hết mọi ngôn ngữ lập trình, nếu không nói là tất cả.
Petruza
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.