Làm thế nào điều này là không thể? Tôi bắt đầu biểu hiện bất hợp pháp.? Nhà điều hành không hoạt động
(s1.charAt(i) == ' ') ? i++ : break;
Làm thế nào điều này là không thể? Tôi bắt đầu biểu hiện bất hợp pháp.? Nhà điều hành không hoạt động
(s1.charAt(i) == ' ') ? i++ : break;
Những điều cần hiểu ở đây là : điều hành được sử dụng để trở lại một giá trị. Về cơ bản, bạn đang gọi một chức năng giống như thế này trong dòng đó:
anonymous function:
if(s1.charAt(i) == ' '):
return i++;
else:
return break;
Không có ý nghĩa, phải không? Nhà điều hành ?: chỉ được thiết kế dưới dạng viết tắt cho các câu trả lời nếu/else giống như trên, chứ không phải thay thế nếu/hoàn toàn khác.
Toán tử bậc ba là biểu thức chứ không phải là câu lệnh. Sử dụng if ... else ...
cho việc này.
Bạn không thể sử dụng break
trong một phần của biểu thức có điều kiện bậc ba là break
không phải là biểu thức, mà chỉ là một câu lệnh điều khiển luồng.
Tại sao không chỉ sử dụng cấu trúc if-else thay thế?
if (s1.charAt(i) == ' ') {
i++;
} else {
break;
}
Tất nhiên nó hoạt động. Nhưng đó là một nhà điều hành. Kể từ khi là một tuyên bố như 'phá vỡ' một toán hạng?
Tôi khuyên bạn nên tránh toán tử Ternary (? :) cho các bài tập đơn giản. Trong sự nghiệp của tôi, tôi đã thấy quá nhiều toán tử ternary lồng nhau điên cuồng; họ trở thành một nhức đầu duy trì (nhiều tình trạng quá tải nhận thức - "đừng làm tôi nghĩ!").
Tôi không cấm chúng trong nhóm của mình, nhưng đề xuất chúng được sử dụng một cách thận trọng. Sử dụng một cách cẩn thận họ sạch hơn nếu/xây dựng khác tương ứng: -
public int ifFoo() {
int i;
if(isSomethingTrue()) {
i = 5;
}
else {
i = 10;
}
return i;
}
So với phương án ternary: -
public int ternaryFoo() {
final int i = isSomethingTrue()
? 5
: 10;
return i;
}
Phiên bản ternary là: -
'return isSomethingTrue()? 5: 10; 'sooo sạch hơn nhiều 10 dòng nếu câu lệnh và biến cục bộ vô dụng. – whiskeysierra
Tôi chỉ đặt biến cục bộ để tôi có thể phá vỡ trên dòng đó nếu tôi cần gỡ lỗi. Không quá ồn ào, dù bằng cách nào! –
Biến có thể là cuối cùng theo cách thực sự, miễn là nó được gán thông qua tất cả các đường dẫn mã trước khi sử dụng. – EJP
hoạt động này có hoạt động nếu bạn có nó trong vòng lặp [while, for, w/e]? – sova