Коротка форма для Java, якщо заява


201

Я знаю, що існує спосіб написання ifзаяви Java у стислому вигляді.

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

Хтось знає, як написати коротку форму для перелічених вище 5 рядків в один рядок?



2
Я припускаю, що ви зрозуміли свою ifлогіку неправильно.
NPE

7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Стів Куо

9
@SteveKuo Ви можете видалити три пробіли. ;)
Пітер Лоурі

2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Антон Дозорцев

Відповіді:


423

Використовуйте потрійний оператор:

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

Я думаю, що у вас є умови назад - якщо це недійсне значення, ви хочете, щоб значення було "N / A".

Що робити, якщо місто є нульовим? Ваш код * потрапляє в ліжко в такому випадку. Додам ще один чек:

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

12
+1, хоча у вас є зайві дужки. Я б написав: name = city.getName() == null ? "N/A" : city.getName();
Андрес Ф.

20
Питання стилю та смаку: мені подобається зробити чітке групування булевого пункту.
duffymo

4
Що б там не було - я використав теорему ДеМоргана і отримав те, що тобі потрібно. Не потрібно редагувати, доки ви правильно висловите логіку.
duffymo

2
FYI зовнішні дужки непотрібні. Можна просто зробитиname = city.getName()==null ? "N/A" : city.getName()
Стів Куо

4
Не String cityName = city.getName();кинеш, NullPointerExceptionякщо city == null? Тому я б сказав, що ваше середнє рішення, безумовно, найкраще (PS і я схвалюю "непотрібні" круглі дужки! Люди повинні пам’ятати, що 99% кодування спілкується з іншими людьми (і з вашим майбутнім), а не з компілятором - інакше ми б використовували c!)
Алекс

32

Щоб уникнути дзвінків .getName()двічі, я б використовував

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

2
У багатокористувацькій системі з мінливим містом може бути інтервенція city.setName(null). Ваша відповідь чітко обробляє це.
Еморі

27

Спосіб зробити це можна за допомогою потрійного оператора:

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

Однак я вважаю, що у вашому коді є помилка друку, і ви хочете сказати:

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

23

? : оператор на Java

На Java ви можете написати:

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

Встановлення однієї змінної в одне з двох станів на основі однієї умови є настільки поширеним використанням if-else, що для неї було створено ярлик, умовний оператор,?:. Використовуючи умовний оператор, ви можете переписати наведений приклад в один рядок, як це:

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

(a> b)? a: b; - це вираз, який повертає одне з двох значень, a або b. Умова, (a> b), перевіряється. Якщо це правда, перше значення, a, повертається. Якщо вона помилкова, повертається друге значення, b. Яке значення повертається, залежить від умовного тесту, a> b. Умовою може бути будь-який вираз, який повертає булеве значення.



18

Я завжди забуваю, як користуватися термінальним ?: оператором . Ця додаткова відповідь - це швидке нагадування. Це стенограма для if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

де

  • () тримає if
  • ? засоби then
  • : засоби else

Це те саме, що

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

10

Ви можете писати if, else if, elseзаяви у стислій формі. Наприклад:

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

Це коротка форма:

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

1
Про це ще не запитували -1.
Makky

8

1. Ви можете зняти дужки та розриви рядків .

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

2. Ви можете використовувати ?: Оператори в java.

Синтаксис:

Variable = Condition ? BlockTrue : BlockElse;

Тож у своєму коді ви можете зробити так:

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

3. Призначте результат умови для Boolean

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

ДОПОМОГА: для цікавих

У деяких мовах, що базуються на JAVAподібному Groovy, ви можете використовувати цей синтаксис:

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

Оператор ?:присвоює значення, повернене зі змінної, про яку ми просимо. У цьому випадку значення, city.getName()якщо це не так null.



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

по-перше, стан (city.getName() == null)перевіряється. Якщо так, то "N/A"присвоюється імені або просто, name="N/A"або інакше значення з city.getName()присвоюється імені, тобто name=city.getName().

Тут на що слід звернути увагу:

  1. умова знаходиться в круглих дужках з наступним знаком питання. Тому я і пишу (city.getName() == null)?. Тут знак питання знаходиться відразу після умови. Легко бачити / читати / вгадувати навіть!
  2. значення ліворуч від двокрапки ( :) і праворуч від двокрапки (а) значення ліворуч від двокрапки задається, коли умова є істиною, інакше значення праворуч від двокрапки присвоюється змінній.

ось посилання: http://www.cafeaulait.org/course/week2/43.html


3

ось один код рядка

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

ось приклад, як це працює, запустіть нижче коду у файлі js та зрозумійте результат. Це ("Data" != null)умова, як ми це робимо в звичайному режимі, if()і "Data"це твердження, коли ця умова стала справжньою. цей " : "акт, як інакше, "N/A"є заявою для інших умов. Сподіваюся, це допоможе вам зрозуміти логіку.

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

console.log(name);



2

Просто та зрозуміло:

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

довга версія:

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

або як я використовую це, щоб зрозуміти для інших читачів кодів:

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

0

Ви можете використовувати потрійний оператор у Java.

Синтаксис:

Condition ? Block 1 : Block 2

Отже, у своєму коді ви можете зробити так,

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

Для отримання додаткової інформації ви можете звернутися до цього ресурсу.


4
Це 6-річне запитання і прийняв відповідь. Ваша відповідь не передбачає нічого нового -1
Макі

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

4
Замість того, щоб просто публікувати якийсь код, ви б більше допомогли ОП, пояснивши техніку. Як це працює, чому це працює?
Забузар

1
Розміщення пробілів навколо ваших операторів значно спрощує читання та обслуговування.
geowar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.