2010-03-09 25 views
5
là gì

Tôi đã luôn luôn được viết biểu thức boolean của tôi như thế này:cách ưa thích để viết các biểu thức boolean trong Java

if (!isValid) { 
    // code 
} 

Nhưng chủ nhân mới của tôi nhấn mạnh vào phong cách sau đây:

if (false == isValid) { 
    // code 
} 

là một phong cách ưa thích, hoặc tiêu chuẩn?

+5

Ồ, một câu hỏi khác để hỏi các nhà tuyển dụng tiềm năng. (Rõ ràng so sánh với hằng số boolean là câm.) – Pointy

+5

Tôi muốn nói thứ hai là được ưa thích ....... nếu và chỉ khi bạn là một obfuscator mã –

+3

Trong khi tôi thích đầu tiên, bạn có thể muốn gắn bó với tiêu chuẩn của nhà tuyển dụng – basszero

Trả lời

10

Tôi thích phong cách đầu tiên bởi vì tôi đọc tự nhiên hơn. Rất bất thường khi thấy phong cách thứ hai.

Một lý do tại sao một số người có thể thích thứ hai trên thay thế khác:

if (isValid == false) { ... } 

là với sau này bạn vô tình viết một đơn = thay vì == sau đó bạn đang gán cho IsValid thay vì thử nghiệm nó nhưng với hằng số đầu tiên bạn sẽ nhận được một lỗi biên dịch.

Nhưng với đề xuất đầu tiên của bạn, vấn đề này không phải là vấn đề, vì vậy đây là một lý do khác để ưu tiên đầu tiên.

+0

Trên thực tế, không có lỗi biên dịch cho lỗi đó nếu isValid là một biến (trừ khi isValid là cuối cùng). Đó là thực sự, * thực sự * xấu. Rõ ràng, ít hơn một vấn đề nếu isValid một phương pháp hoặc một biểu thức, nhưng như là một thói quen ... – Carl

+2

Tôi tin rằng đó là lý do cho sự đảo ngược trật tự. "if (false = isValid)" là lỗi. – DJClayworth

2

IMO cái đầu tiên dễ đọc hơn trong khi chữ cái thứ hai có nhiều chi tiết hơn.

Tôi chắc chắn sẽ đi đến số 1

+0

+1 để dễ đọc. –

4

Đó là discussed cho C# vài giờ trước.

Cấu trúc false == isValid là phần còn lại của C-world, nơi trình biên dịch cho phép bạn thực hiện các bài tập trong câu hỏi if. Tôi tin rằng các trình biên dịch Java sẽ cảnh báo bạn trong trường hợp này.

Nhìn chung, tùy chọn thứ hai quá dài.

+0

Phép gán Boolean trong một biểu thức không hiển thị cho tôi bất kỳ lỗi trình biên dịch hoặc cảnh báo nào trong Eclipse. – Carl

+0

Việc chuyển nhượng boolean chung không, nhưng một nỗ lực để gán một giá trị cho hằng số nội trang 'false' làm - do đó thứ tự. Trong các mã C cũ (và tôi có nghĩa là OLD) FALSE thường là một biến được gán và có thể được ghi đè. – DJClayworth

2

Bạn đang đánh giá biến, không phải là false vì vậy biến số này không chính xác từ góc nhìn dễ đọc. Vì vậy, cá nhân tôi sẽ gắn bó với tùy chọn đầu tiên.

1

Kiểu thứ hai không yêu cầu bạn phải phủ nhận chính biểu thức đó (có thể phức tạp hơn nhiều so với chỉ "isValid"). Nhưng viết "isValid == false" có thể dẫn đến việc gán không mong muốn nếu bạn quên nhập hai = 's, do đó thành ngữ được đặt ở bên phải cái không thể là giá trị.

Kiểu đầu tiên dường như được ưa thích hơn trong số những người biết họ đang làm gì.

8

Tuyệt đối là người đầu tiên. Điều thứ hai phản bội sự thiếu hiểu biết về bản chất của các biểu thức và giá trị, và như là một phần của tiêu chuẩn mã hóa, nó ngụ ý rằng nhà tuyển dụng hy vọng sẽ thuê những lập trình viên không đủ năng lực - chứ không phải là một điềm tốt.

+0

Bạn đang giết tôi. Nhưng ít nhất nó có nghĩa là tôi không điên. – Timothy

7

Mọi người đều công nhận đoạn này:

if (isValid.toString().lenght() > 4) { 
    //code 
} 

Tôi nghĩ rằng ví dụ thứ hai của bạn nhìn cùng một hướng.

+0

eschew obfuscation? – Timothy

2

Tôi sẽ cố gắng một câu trả lời toàn diện ở đây kết hợp tất cả các câu trả lời ở trên.

Phong cách đầu tiên là chắc chắn được ưa thích vì những lý do sau đây:

  • nó ngắn
  • nó là dễ đọc hơn, và do đó dễ dàng hơn để hiểu
  • nó được sử dụng rộng rãi hơn, có nghĩa là độc giả sẽ nhận ra mẫu nhanh hơn
  • "false == ..." chứ không phải "... == false" là một vi phạm trật tự tự nhiên khác, khiến người đọc nghĩ rằng "có điều gì đó kỳ lạ xảy ra mà tôi cần chú ý đến ", khi không có.

Ngoại lệ duy nhất cho điều này là khi biến là Boolean chứ không phải là boolean. Trong trường hợp đó, biểu thức thứ hai là một biểu thức khác từ lần đầu tiên, đánh giá thành false khi isValid là null cũng như khi nó là Boolean.FALSE. Nếu đây là trường hợp có lý lẽ tốt cho việc sử dụng thứ hai.

0

Tôi chỉ muốn nói rằng tôi đã học C hai mươi năm trước tại trường và có chuyển sang Perl và Java và bây giờ C# mà tất cả đều có cùng một cú pháp và ...

Tôi nghĩ (! Myvar) là nhất phổ biến

tôi nghĩ (myvar == false) là tốt quá

trong 20 năm tôi chưa bao giờ nhìn thấy ngay cả

(false==myvar) 

tôi nghĩ rằng ông chủ của bạn đang hút thuốc lá một cái gì đó-- tôi xin lỗi nhưng tôi sẽ coi đây là dấu hiệu sếp của bạn là một loại kiểm soát quái dị hoặc numbskull.

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