Краткая форма для Java if


201

Я знаю, что есть способ написать оператор Java ifв краткой форме.

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";
Антон Дозорцев

Ответы:


424

Используйте троичный оператор:

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
К вашему сведению внешние скобки не нужны. Вы можете просто сделатьname = city.getName()==null ? "N/A" : city.getName()
Стив Куо

4
Не String cityName = city.getName();бросите, NullPointerExceptionесли city == null? Поэтому я бы сказал, что ваше среднее решение определенно является лучшим (PS и я одобряю «ненужные» скобки! Люди должны помнить, что 99% кодирования связывается с другими людьми (и вашим будущим я), а не с компилятором - иначе мы будем использовать с!)
Алекс

33

Чтобы не звонить .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) проверяется. Если это правда, первое значение, а, возвращается. Если оно ложно, возвращается второе значение 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.
Макки

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 hasName = city.getName() != null;

EXTRA: для любопытных

В некоторых языках, основанных на 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
Makky

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

4
Вместо того, чтобы просто публиковать некоторый код, вы бы больше помогли OP, объяснив методику. Как это работает, почему это работает?
Забузард

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