Toán tử ba năm (điều kiện) trả về một giá trị. Nếu các phương thức của bạn không, chúng không thể được sử dụng như một phần của toán tử (nơi nó lấy giá trị).
Để hiểu rõ hơn, hãy nghĩ về một toán tử nhị phân đơn giản: +
. Nó hoạt động theo cách này:
<eval1> + <eval2> --> <value>
Cần 2 phần có giá trị và trả về một phần khác. Nếu bạn đã gõ
doThis() + doThat();
hoặc thậm chí
gimmeAValue = doThis() + doThat();
nó sẽ thất bại, như không doThis()
cũng không doThat()
đánh giá bất cứ điều gì (họ "trở lại" void
). Tất nhiên, cả hai <eval1>
và <eval2>
phải thuộc một số loại "tương thích" để nhà điều hành +
có thể xử lý chúng và trả lại giá trị của một số loại.
Bây giờ chúng ta hãy xem các nhà điều hành ternary:
<evalBoolean> ? <eval1> : <eval2> --> <value>
Phải mất 3 có thể đánh giá phần, và trả về một giá trị.
Phần đánh giá đầu tiên phải dễ hiểu (có thể truyền) bởi trình biên dịch dưới dạng boolean. Nó sẽ được sử dụng để quyết định phần nào trong số 2 phần còn lại phải được trả về.
Hai phần còn lại có giá trị khác phải, cũng ... có giá trị. Một cái gì đó. Của một số loại.
Nói cách khác: toán tử điều kiện bậc ba có ý định trả về một cái gì đó, không phải là phân nhánh mã. Được sử dụng theo cách này:
gimmeAValue = testMe() ? returnThis() : returnThat();
Nguồn
2012-09-23 22:07:23
Không, không phải như vậy. Chỉ cần sử dụng 'if' như một người bình thường. –
Tôi tin rằng toán tử bậc ba có nghĩa vụ gán giá trị cho một thể hiện của một loại, với một điều kiện kiểm tra. cách bạn đang đề xuất nó không thỏa mãn định dạng. –
@codesparkle - không nhiều không gian. if (condition) {doThis();} else {doThat();} – tehdoommarine