Dạng rút gọn cho Java if statement


201

Tôi biết có một cách để viết một ifcâu lệnh Java ở dạng ngắn.

if (city.getName() != null) {
    name = city.getName();
} else {
    name="N/A";
}

Có ai biết cách viết mẫu ngắn cho 5 dòng trên thành một dòng không?



2
Tôi giả sử bạn có iflogic của bạn đi sai vòng.
NPE

7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Steve Kuo

9
@SteveKuo Có ba khoảng trắng bạn có thể xóa. ;)
Peter Lawrey

2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Anton Dozortsev

Câu trả lời:


423

Sử dụng toán tử ternary:

name = ((city.getName() == null) ? "N/A" : city.getName());

Tôi nghĩ rằng bạn có các điều kiện ngược - nếu nó không có giá trị, bạn muốn giá trị là "Không áp dụng".

Nếu thành phố là null thì sao? Mã của bạn * đập vào giường trong trường hợp đó. Tôi muốn thêm một kiểm tra:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());

12
+1, mặc dù bạn có dấu ngoặc đơn thừa. Tôi đã có thể viết: name = city.getName() == null ? "N/A" : city.getName();
Andres F.

20
Một vấn đề về phong cách và hương vị: Tôi muốn làm cho nhóm các mệnh đề boolean rõ ràng.
duffymo

4
Dù thế nào đi nữa - tôi đã sử dụng định lý của DeMorgan và có được những gì bạn cần. Không cần chỉnh sửa, miễn là bạn diễn đạt logic một cách chính xác.
duffymo

2
FYI dấu ngoặc đơn bên ngoài là không cần thiết. Bạn chỉ có thể làmname = city.getName()==null ? "N/A" : city.getName()
Steve Kuo

4
Sẽ không String cityName = city.getName();ném NullPointerExceptionnếu city == null? Do đó, tôi muốn nói rằng giải pháp trung gian của bạn chắc chắn là tốt nhất (PS và tôi chấp nhận các dấu ngoặc đơn 'không cần thiết'! Mọi người cần nhớ rằng 99% mã hóa đang giao tiếp với người khác (và bản thân tương lai của bạn), chứ không phải trình biên dịch - nếu không chúng tôi sẽ sử dụng c!)
Alex

32

Để tránh gọi .getName()hai lần tôi sẽ sử dụng

name = city.getName();
if (name == null) name = "N/A";

2
Trong một hệ thống nhiều người dùng với một thành phố đột biến, có thể có sự can thiệp city.setName(null). Câu trả lời của bạn xử lý gọn gàng đó.
emory

27

Cách thực hiện là với toán tử ternary:

name = city.getName() == null ? city.getName() : "N/A"

Tuy nhiên, tôi tin rằng bạn có một lỗi đánh máy trong mã của bạn ở trên và bạn muốn nói:

if (city.getName() != null) ...

23

Các ? : toán tử trong Java

Trong Java bạn có thể viết:

if (a > b) {
  max = a;
}
else {
  max = b;
}

Đặt một biến duy nhất thành một trong hai trạng thái dựa trên một điều kiện duy nhất là cách sử dụng phổ biến của if-other mà một phím tắt đã được tạo ra cho nó, toán tử điều kiện,?:. Sử dụng toán tử có điều kiện, bạn có thể viết lại ví dụ trên trong một dòng như thế này:

max = (a > b) ? a : b;

(a> b)? a: b; là một biểu thức trả về một trong hai giá trị, a hoặc b. Điều kiện, (a> b), được kiểm tra. Nếu nó đúng giá trị đầu tiên, a, được trả về. Nếu nó sai, giá trị thứ hai, b, được trả về. Giá trị nào được trả về phụ thuộc vào phép thử có điều kiện, a> b. Điều kiện có thể là bất kỳ biểu thức nào trả về giá trị boolean.


21

trong java 8:

name = Optional.ofNullable(city.getName()).orElse("N/A")

18

Tôi luôn quên cách sử dụng ?: toán tử ternary . Câu trả lời bổ sung này là một lời nhắc nhở nhanh chóng. Nó là tốc ký cho if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

Ở đâu

  • () giữ if
  • ? có nghĩa then
  • : có nghĩa else

Nó giống như

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}

10

Bạn có thể viết if, else if, elsebáo cáo ở dạng ngắn. Ví dụ:

Boolean isCapital = city.isCapital(); //Object Boolean (not boolean)
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";      

Đây là hình thức ngắn của:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}

1
Điều này không được hỏi nên vẫn -1.
Makky

8

1. Bạn có thể loại bỏ dấu ngoặcngắt dòng .

if (city.getName() != null) name = city.getName(); else name = "N/A";

2. Bạn có thể sử dụng ?: Toán tử trong java.

Cú pháp:

Variable = Condition ? BlockTrue : BlockElse;

Vì vậy, trong mã của bạn, bạn có thể làm như thế này:

name = city.getName() == null ? "N/A" : city.getName();

3. Gán kết quả điều kiện cho Boolean

boolean hasName = city.getName() != null;

EXTRA: cho tò mò

Trong một số ngôn ngữ dựa trên JAVAthích Groovy, bạn có thể sử dụng cú pháp này:

name = city.getName() ?: "N/A";

Toán tử ?:gán giá trị được trả về từ biến mà chúng ta đang yêu cầu. Trong trường hợp này, giá trị của city.getName()nếu không null.


5
name = (city.getName() != null) ? city.getName() : "N/A";

3
name = ( (city.getName() == null)? "N/A" : city.getName() );

trước hết là điều kiện (city.getName() == null)được kiểm tra Nếu có, thì "N/A"được gán cho tên hoặc đơn giản name="N/A"hoặc nếu không, giá trị từ city.getName()được gán cho tên, nghĩa là name=city.getName().

Những điều cần chú ý ở đây:

  1. điều kiện là trong ngoặc đơn theo sau là một dấu hỏi. Đó là lý do tại sao tôi viết (city.getName() == null)?. Ở đây dấu hỏi là ngay sau điều kiện. Dễ dàng nhìn thấy / đọc / đoán thậm chí!
  2. giá trị bên trái của dấu hai chấm ( :) và giá trị bên phải của dấu hai chấm (a) giá trị bên trái của dấu hai chấm được gán khi điều kiện là đúng, mặt khác giá trị bên phải của dấu hai chấm được gán cho biến.

đây là một tài liệu tham khảo: http://www.cafeaulait.org/cference/week2/43.html


3

đây là một dòng mã

name = (city.getName() != null) ? city.getName() : "N/A";

đây là ví dụ về cách thức hoạt động của nó, chạy bên dưới mã trong tệp js và hiểu kết quả. Đây ("Data" != null)là điều kiện như chúng ta làm trong bình thường if()"Data"là tuyên bố khi điều kiện này trở thành sự thật. " : "hành động này như là khác và "N/A"là tuyên bố cho điều kiện khác. Hy vọng điều này sẽ giúp bạn hiểu logic.

name = ("Data" != null) ? "Data" : "N/A";

console.log(name);


2

Sử dụng org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");

2

Đơn giản và rõ ràng:

String manType = hasMoney() ? "rich" : "poor";

phiên bản dài:

      String manType;
    if (hasMoney()) {
        manType = "rich";
    } else {
        manType = "poor";
    }

hoặc làm thế nào tôi đang sử dụng nó để rõ ràng cho các trình đọc mã khác:

 String manType = "poor";
    if (hasMoney())
        manType = "rich";

0

Bạn có thể sử dụng toán tử ternary trong java.

Cú pháp:

Condition ? Block 1 : Block 2

Vì vậy, trong mã của bạn, bạn có thể làm như thế này,

name = ((city.getName() == null) ? "N/A" : city.getName());

Để biết thêm thông tin bạn có thể tham khảo tài nguyên này .


4
Đây là câu hỏi 6 năm tuổi và đã chấp nhận câu trả lời. Câu trả lời của bạn không cung cấp bất cứ điều gì mới -1
Makky

-3
name = city.getName()!=null?city.getName():"N/A"

4
Thay vì chỉ đăng một số mã, bạn sẽ giúp OP nhiều hơn bằng cách giải thích kỹ thuật này. Làm thế nào nó hoạt động, tại sao nó hoạt động?
Zabuzard

1
Đặt không gian xung quanh các nhà khai thác của bạn giúp đọc và bảo trì dễ dàng hơn nhiều.
geowar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.