2010-08-30 25 views
8

Có thể trùng lặp (foo!):
What is the preferred way to write boolean expressions in JavaThực hành tốt nhất: if (foo == false) hoặc nếu

Hôm nay, tôi và đồng nghiệp của tôi cào lên một cuộc tranh cãi. Cách nào tốt hơn để sử dụng các biến boolean trong mã Java cùng với các câu lệnh if.

boolean foo=true 
//1. 

if(foo == false) 
    // do something 
else 
    // do something else 

//2. 

if(!foo) 
    // do something 
else 
    // do something else 

Tôi hỗ trợ [1], vì tôi nghĩ nó dễ đọc hơn. Các bạn nghĩ gì ?.

+0

Bản sao y của [cách ưa thích để viết các biểu thức boolean trong Java là gì] (http://stackoverflow.com/questions/2409378/what-is-the-preferred-way-to-write -boolean-expressions-in-java) –

+0

Ok, bây giờ tôi phải thừa nhận quan điểm của bạn tôi (và các bạn). Cảm ơn tất cả các bạn đã tham gia nhanh chóng. :) – pavanlimo

+2

Nếu bạn hỗ trợ 1, tại sao dừng lại ở đó? Giảm yêu cầu vô lý của quảng cáo mà bạn sử dụng 'if ((((foo == false) == true) == true) == true) ...'. – paxdiablo

Trả lời

12

Số 2, cùng với "foo" có tên mô tả, do đó mã đọc tốt:

if (!hasPurple) ...

+0

Có, các biến được đặt tên tốt hơn chắc chắn con đường để đi. Trở nên dễ đọc hơn. – drekka

0

Tôi đi vì 2 vì người lập trình thậm chí 2 có thể đọc được.

Hãy tưởng tượng bạn có hàng trăm kiểm tra xác thực như vậy để bạn luôn kiểm tra sai.

Không

0

Nếu bạn là người duy nhất sẽ duy trì mã của bạn sau đó bạn được tự do sử dụng bất kỳ kiểu nào bạn thích.

Có nói rằng foo được ưa chuộng bởi hầu hết các nhà phát triển mà tôi biết.

0

Đó là vấn đề quan điểm. Tôi thích số 2 vì ít mã của nó để viết và tôi nghĩ rằng nó chỉ là có thể đọc được.

6

Tôi tìm thấy số 2 dễ đọc hơn. Tôi nghĩ rằng mỗi dev Java (tôi là một C# dev) sẽ biết những gì! có nghĩa. Tôi

Trong khi có lẽ không phải là điểm ở đây, tôi thích đặt khối "đúng" của tôi làm tuyên bố. Nếu tình trạng này thường xảy ra là sai, sau đó tôi đặt tên biến của tôi để đại diện cho

if (notFoo) 
    // do something when 
else 
    // do something else 
+1

Tôi không đồng ý. Các biến Boolean nên được đặt tên một cách quyết đoán bất cứ khi nào có thể. Bạn sẽ luôn có thể đọc được! là "không", và nếu bạn cần foo, bạn tránh nhầm lẫn gấp đôi tiêu cực! notFoo. Ngoại lệ duy nhất là khi foo có một từ trái nghĩa (như lồi vs lõm). – ILMTitan

+0

Đồng ý đôi âm là ác :) Nhưng sau đó, nếu sử dụng hoàn toàn nếu-else,! NotFoo sẽ chỉ được đặt tên Foo :) –

4

tôi thấy nó là một ý tưởng tốt để tránh những thứ như

if (foo == true){}

vì thỉnh thoảng bạn có thể viết

if (foo = true){}

dưới dạng lỗi đánh máy. Thông thường, nó là một sai lầm dễ dàng để phát hiện, nhưng nó chỉ có vẻ cho vay chính nó tốt để làm cho rằng sai lầm nhanh chóng.

+0

'if (foo = true) {}' không hợp pháp Java và sẽ không biên dịch (và nên nổi bật như cú pháp xấu trong IDE của bạn). Việc sợ các câu lệnh 'if (var = constant)' là một sự trì hoãn xấu từ C, ở đó nó là hợp pháp (và đôi khi được khuyến khích) để gán vào điều kiện. Đừng lo lắng về điều đó, và thay vào đó hãy lo lắng về những gì dễ đọc hơn. – Avi

+1

@Avi: Nó thực sự biên dịch theo JDK6. Tôi đã cho bạn lợi ích của sự nghi ngờ và tự viết nó lên. Nó biên dịch không có cảnh báo trên cả hai dòng lệnh trên một hộp FreeBSD và thông qua Eclipse, và Eclipse cho thấy không có cảnh báo của riêng nó. – JBirch

+0

bạn là chính xác. Tôi xin lỗi. Tôi đã nhầm lẫn, bởi vì hầu hết các biểu thức gán là bất hợp pháp trong điều kiện, trừ khi chúng có kiểu boolean (vì không có chuyển đổi boolean hoặc boolean tự động trong Java). Tôi vẫn sẽ đi với các dễ đọc hơn mặc dù. Trong trường hợp các số nguyên, tôi sẽ viết 'if (foo == CONSTANT)'; trong trường hợp boolean, tôi sẽ viết 'if (foo)', nó dễ đọc hơn và tránh được vấn đề này. – Avi

0

Khi sử dụng biến boolean làm điều kiện trong câu lệnh, không so sánh nó với đúng.

Không sai, nhưng kiểu xấu, Vì nó đã là giá trị boolean nên chỉ cần sử dụng nó.

Lý do tại sao "! Foo" tốt hơn hơn "foo == false".Tham chiếu from

  • conciseness: giả định rằng bạn đang ở trong một bối cảnh mà một boolean là
    yêu cầu, và "x" là một boolean, nó là nhân vật ít hơn để viết "x" hơn "x
    = = true ", hoặc"! x "hơn" x == false ".

  • ước: dày dạn lập trình trong Java (hoặc C, C++, C# và hầu hết
    các ngôn ngữ khác) mong đợi để xem "x" thay
    hơn "x == true" và "x" thay
    hơn "x == sai".

  • Mạnh mẽ: trong Java các báo cáo có điều kiện và vòng lặp tất cả các yêu cầu một biểu thức có giá trị
    boolean trong điều kiện
    . Nếu "y" không phải là boolean,
    thì lỗi đánh máy của biểu mẫu "if (y = foo) {" sẽ cung cấp lỗi biên dịch trong
    Java. Nhưng nếu "y" là boolean thì
    "nếu (y = foo) {" không cung cấp lỗi
    biên dịch. Do đó, bằng cách tránh "==" đối với các toán tử, bạn tránh đặt
    mình lên cho toàn bộ các lỗi lỗi
    do lỗi chính tả.

+3

-1 cho dán ** sao chép ** không thể tách rời của [Câu trả lời của Stephen] (http://stackoverflow.com/questions/1451152/difference-between-while-x-false-and-while-x-in-java/1453172 # 1453172).Đầu tiên, ngay cả khi có một liên kết, bạn làm cho nội dung xuất hiện như nó là của bạn, hoặc được lặp lại, trong khi nó không phải là. Định dạng nó như được trích dẫn để không có sự mơ hồ. Thứ hai, nếu câu trả lời được dán là thích hợp, thì câu hỏi rất có thể là bản sao và phải được đóng như vậy. Cuối cùng, đây chỉ là thực hành tồi. –

+0

@Pascal Thivent Đối với câu trả lời của tôi, tôi đã thêm quan điểm của tôi (trên cùng 2 dòng in đậm) cũng như phần được tham chiếu thêm từ Stephen.I cũng đã thêm liên kết nơi nó được tham chiếu từ đó. Tôi không có ý định hiển thị phần tham chiếu đó là quan điểm của tôi. Tôi xin lỗi nếu nó cảm thấy như vậy. Tôi đã loại bỏ sự mơ hồ cũng như trích dẫn nó rõ ràng. – YoK

+0

Cảm ơn bạn đã xóa sự mơ hồ. Tôi thực sự nghĩ rằng điều quan trọng là tối đa hóa tính minh bạch và tôi sẽ loại bỏ ý kiến ​​của mình. –

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