2010-05-12 61 views
5

Tôi đã viết những if -statement sau trong Java:Toán tử điều kiện trong câu lệnh if?

if(methodName.equals("set" + this.name) || 
    isBoolean() ? methodName.equals("is" + this.name) : 
        methodName.equals("get" + this.name)) { 
    ... 
} 

Đây có phải là một thực hành tốt để viết các biểu thức như vậy trong if, tách nhà nước từ điều kiện? Và biểu thức này có thể được đơn giản hóa không?

+0

Bạn có biết các công cụ lập bản đồ Javabean hiện có không? Có ** rất nhiều ** :) – BalusC

+0

Tôi không có bất cứ điều gì đặc biệt quan trọng để đóng góp, nhưng ngay cả khi một người yêu thương nhà điều hành ba năm, tôi phải lưu ý rằng một số người tin rằng nó nên được sử dụng rất hiếm khi. Những người đó có lẽ sẽ pooh-pooh sử dụng của bạn. –

+0

@BalusC: Tuyệt vời đoán về hoạt động JavaBean của tôi. Tôi đang thực hiện nó chỉ cho sở thích và sử dụng cá nhân, làm sạch cú pháp bên trong Beans bằng cách chỉ 'super.property (newValue)' trong mỗi setter. ;-) nhưng tôi biết họ, cảm ơn vì đã đề cập đến. – Pindatjuh

Trả lời

8

tôi sẽ thay đổi nó để

if (methodName.equals("set" + this.name) 
|| methodName.equals((isBoolean() ? "is" : "get") + this.name)) { 
    ... 
} 
+0

Và tôi sẽ bỏ đi dự phòng 'this.' của –

+1

@Software Monkey: đó là kiểu mã của tôi, tôi xin lỗi nếu nó làm phiền bạn. – Pindatjuh

+0

@Pindatjuh: Đủ công bằng - Tôi đã nói "Tôi sẽ", không phải "bạn nên". Để mỗi của riêng mình. Nó không làm phiền tôi, nó chỉ là gõ thêm. –

2

nó là thực hành tốt? Sẽ tốt nếu nó dễ đọc hơn. Nó làm cho nó dễ dàng hơn để đọc nếu (1) nó và (2) loại người sẽ bị nhầm lẫn bởi nó sẽ không được đọc nó. Ai sẽ đọc nó?

2

Chẳng phải công việc như sau?

if (methodName.equals("set" + this.name) 
    || methodName.equals("get" + this.name) 
    || (isBoolean() && methodName.equals("is" + this.name))) { 
    ... 
} 

Dễ đọc hơn cách bạn sử dụng toán tử bậc ba và dễ hiểu hơn. Nó cũng có lợi thế là nó có thể tránh một cuộc gọi phương thức không cần thiết đến phương thức isBoolean (nó có các cuộc gọi phương thức 1, 2 hoặc 4 trong khi bạn luôn có 1 hoặc 3; hiệu suất/lỗ có thể quá ít phút để chú ý).

Cũng có một câu hỏi tương tự ở đây có tựa đề "Is this a reasonable use of the ternary operator?" Một người dùng có the following to say:

Nhà điều hành ternary có nghĩa là để trở lại một giá trị.

IMO, không được biến đổi trạng thái và giá trị trả lại sẽ được sử dụng.

Trong trường hợp khác, hãy sử dụng nếu câu lệnh. Nếu báo cáo có nghĩa là để thực hiện khối mã.

Lưu ý rằng tôi bao gồm dấu ngoặc đơn xung quanh biểu thức có chứa '& &' để dễ đọc. Chúng không cần thiết vì x && y được đánh giá trước m || n.

Cho dù bạn chọn sử dụng tùy thuộc vào bạn, nhưng tôi có xu hướng tránh nó có lợi cho khả năng đọc.

+0

Viết lại của bạn rất thực tế, vì phương thức "getSomeBooleanProperty" cũng sẽ chuyển. Mặc dù, nó không thể đọc được như SLaks (chủ quan). – Pindatjuh

2

Tôi xin được nghiêng để thay đổi nó để

if (methodName.equals(setterForThis()) 
    || methodName.equals(getterForThis())) { 
    ... 
} 

với một số chức năng trích xuất:

private String setterForThis() { 
    return "set" + this.name; 
} 

private String getterForThis() { 
    return (isBoolean() ? "is" : "get") + this.name; 
} 

Đó là còn tất nhiên, nhưng tôi không thực sự vào sân anyway.

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