Вопрос

Пожалуйста, продемонстрируйте, как тернарный оператор работает с обычным блоком if/else.Пример:

Boolean isValueBig = value > 100 ? true : false;

Точный дубликат: Как использовать тернарный оператор?

Это было полезно?

Решение

Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

if(  value > 100 ) { 
      isValueBig = true;
} else { 
     isValueBig = false;
}

Другие советы

Разница между троичной операцией и if / else заключается в том, что троичное выражение является оператором, который оценивает значение, а if / else - нет.

Чтобы использовать ваш пример, перейдите от использования троичного выражения к if / else, вы можете использовать это утверждение:

Boolean isValueBig = null;
if(value > 100)
{ 
    isValueBig = true 
}
else
{
    isValueBig = false;
}

В этом случае ваше утверждение эквивалентно следующему:

Boolean isValueBig = (value > 100);

Когда я был новичком в C ++, я обнаружил, что он помогает читать эту конструкцию следующим образом:

Boolean isValueBig = if condition ? then x else: y;

(Обратите внимание, что это недопустимый код. Это только то, чему я научился читать в своей голове.)

Boolean isValueBig;

if (value > 100)
{
   isValueBig = true;
}
else 
{
   isValueBig = false;
}
Boolean isValueBig;

if(value > 100) { isValueBig = true; } else { isValueBig = false; }

Я никогда не был поклонником тернарного оператора, потому что считал, что его трудно читать.Так случилось, что Джон Скит и его книга C# в деталях наконец-то ударил этого старого пса по голове и заставил его утонуть.Джон сказал, и я перефразирую, подумайте об этом как о вопросе.

значение > 100?

"да" :"нет"

Теперь слепой может видеть.

Надеюсь, это поможет вам сделать это вашей второй натурой.

Как указано на ?: страница MSDN оператора , " условный оператор (? :) возвращает одно из двух значений в зависимости от значения логического выражения. "

Таким образом, вы можете использовать троичный оператор, чтобы возвращать больше, чем просто логические значения:

   string result = (value > 100 ) ? "value is big" : "value is small";

Пример PHP

<?php

  // Example usage for: Ternary Operator
  $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

  // The above is identical to this if/else statement
  if (empty($_POST['action'])) {
    $action = 'default';
  } else {
    $action = $_POST['action'];
  }

?>
  

" Выражение (expr1)? (expr2): (expr3) оценивается как expr2 , если expr1 оценивается как TRUE и expr3 если expr1 оценивается как FALSE . "

PHP-документация по операторам сравнения

Убедитесь, что вы не смешиваете типы в частях true / false в Java. Это дает странные результаты: - (

Плохой пример, потому что вы могли бы легко написать

Boolean isValueBig = value > 100 ? true : false;

как:

bool isValueBig = value > 100

Кроме того, все остальные уже ответили на него.Я бы просто не рекомендовал использовать тернарные операторы для установки логических значений, поскольку то, что вы оцениваете, уже является логическим значением.

Я понимаю, что это был всего лишь пример, но на него стоило обратить внимание.

Другие уже ответили на это, но вот одну вещь, которую вы действительно должны знать об использовании тройного и под этим я имею в виду, никогда не делайте этого.

Предположим, что у вас есть фрагмент кода, который должен возвращать разные объекты для каждого возможного изменения некоторого значения, скажем, для простоты, целое число от 1 до 5. Ваш код выглядит следующим образом:

if(i==1) {
    return new ObjectOne();
} else if(i==2) {
    return new ObjectTwo();
} else if(i==3) {
    return new ObjectThree();
} else if(i==4) {
    return new ObjectFour();
} else if(i==5) {
    return new ObjectFive();
} else {
    return new DefaultObject();
}

Это легко понять, но немного тяжело. Поскольку ternary - это просто еще один способ написания оператора if..else , который можно реорганизовать в этот

return (i==1) ? new ObjectOne() :
       (i==2) ? new ObjectTwo() :
       (i==3) ? new ObjectThree() :
       (i==4) ? new ObjectFour() :
       (i==5) ? new ObjectFive() : new DefaultObject();

Он называется вложенным троичным . Это зло, теперь, когда вы знаете об этом, пожалуйста, никогда не используйте его. Может показаться, что он использует его, как и в предыдущем случае, но вполне вероятно, что в реальных ситуациях вам придется использовать его где-то, где он теряет читабельность (подумайте об изменении конфигурации с переменным количеством параметров и тому подобное).

Бонусный сектор: никогда не устанавливайте значения атрибута внутри if (), просто посмотрите на это: if(bool=true!=false) { .. }

Как указано в MSDN (отмечено в предыдущем сообщении)

string result = (value > 100)? " значение большое " : " значение маленькое " ;;

Может читаться как:

Значение больше 100? Если да, строковым результатом является & Quot; значение большое & Quot ;, если нет, строковым результатом является & Quot; значение маленькое & Quot;.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top