2013-01-09 41 views
7

Possible Duplicate:
What is the difference between these (bCondition == NULL) and (NULL==bCondition)?
Javascript minification of comparison statementsTrình tự của biểu thức trong một câu lệnh if

Ive được viết if báo cáo của tôi như thế này:

if(variable1 === 1){} 
if(variable2 > 10){} 
if(variable3 == "a"){} 

Nhưng tôi nhớ đọc ở đâu đó (tiếc là tôi không thể tìm thấy trang đó nữa), mà if báo cáo được viết tốt hơn như sau:

if(1 === variable1){} 
if(10 < variable2){} 
if("a" == variable3){} 

Nơi bạn đặt biến ở phía bên phải của cách diễn đạt.

Điều này có đúng không? Và, nếu có, bất cứ ai có thể làm sáng tỏ vì sao điều này đúng không? Ngoài ra, điều này có áp dụng cho tất cả các ngôn ngữ lập trình hay chỉ javascript?

TIA

+3

Cả hai đều đúng nhưng thứ hai là xấu. –

+5

http://i.stack.imgur.com/xXkvA.jpg, từ [câu trả lời đã xóa này] (http://stackoverflow.com/a/2430307/508666). Đối với những người không thể xem nội dung bị xóa: '" Điều kiện Yoda "- sử dụng if (hằng số == biến) thay vì if (variable == constant), như if (4 == foo). Bởi vì nó giống như nói "nếu màu xanh là bầu trời" hoặc "nếu cao là người đàn ông". A.k.a. fugly như địa ngục :) – PeeHaa

+0

Tôi luôn luôn sử dụng đầu tiên – Saju

Trả lời

4

1 === variable1 giống như biểu thức variable1 === 1 được viết bằng ký hiệu Yoda **: hằng số được liệt kê ở phía bên tay trái, biến ở phía bên tay phải.

Lý do chính tại sao một số lập trình viên chọn sử dụng nó là tránh nhầm lẫn thường gặp khi viết if (a = 1) nơi lập trình viên thực sự có nghĩa là if (a == 1) hoặc if (a === 1).Dòng mã sau đây sẽ làm việc nhưng không như mong đợi (a được gán một giá trị và if khối sẽ luôn luôn được thực hiện):

if (a = 1) {} 

Khái niệm tương tự được viết theo chiều ngược lại sẽ tạo ra một cú pháp (hoặc biên soạn) lỗi :

if (1 = a) {} 

Lập trình viên ngay lập tức có thể nhận ra lỗi và sửa chữa nó.

Tôi không thích hoặc sử dụng ký pháp Yoda. Tôi cố gắng giữ cho mắt mình mở khi mã hóa.

** Tôi không thể tìm ra nguồn gốc của cụm từ này.

+2

nguồn gốc của thuật ngữ: http : //www.codinghorror.com/blog/2012/07/new-programming-jargon.html – Jimmery

1

Cả hai đều đúng nhưng thứ hai là xấu và tôi chưa thực sự thấy nhiều. Nó giống như nói

"If blue is sky"

thay vì

"if sky is blue"

. Không thể đọc lại nơi tôi đã đọc nó :).

+1

[Trình biên dịch đóng cửa ] (http://closure-compiler.appspot.com/home) thiết lập giá trị tại địa điểm đầu tiên trong 'khoản if'. – VisioN

+0

tôi đã cố gắng. tôi nhận thấy. Tuy nhiên trông giống như đọc từ phải sang trái –

+0

tôi tự hỏi tại sao Closure Compiler sử dụng "điều kiện Yoda"? – Jimmery

2

Thứ hai là tốt hơn bởi vì nếu bạn thực hiện một lỗi đánh máy như:

if (2 = myVar) { } 

bạn thực hiện một lỗi javascript ... Thay vào đó nếu bạn viết:

if (myVar = 2) { } // assignment, always true 

điều này là sai vì nó không phải là những gì bạn muốn, nhưng đây không phải là lỗi ... vì vậy khó tìm hơn.

+1

Đây không phải là lý do chính đáng để sử dụng biểu mẫu ít đọc được hơn. –

+0

câu trả lời chấp nhận cho câu hỏi này cho thấy điều ngược lại: http://stackoverflow.com/questions/5854317/what-is-the-difference-between-these-bcondition-null-and-null-bcondition – Jimmery

0

===:

Theo định nghĩa, đó là giao hoán, vì nó sẽ kiểm tra cả hai đối tượng đều giống nhau (cùng loại, cùng giá trị).

==:

== là phức tạp hơn như có sự chuyển đổi có liên quan nhưng the specification makes it clear:

A == B is equivalent to B == A, except in the order of evaluation of A and B

Nói cách khác, == là giao hoán.

Điều này có nghĩa là bạn chỉ nên sử dụng ít xấu xí và quen thuộc nhất với người đọc. Đó là cái đầu tiên.

Các vấn đề liên quan