Как работает тернарный оператор?
-
19-08-2019 - |
Вопрос
Пожалуйста, продемонстрируйте, как тернарный оператор работает с обычным блоком 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 . "
Убедитесь, что вы не смешиваете типы в частях 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;.