тернарный оператор java .
Основы Java. Урок 13: Тернарный оператор ?: |
|
|
||||||||||
Уроки по Java. Тернарные операции в джава |
|
|
||||||||||
Условный тернарный оператор что это. Как работает. Как использовать. C ++ Для начинающих. Урок #69 |
|
|
||||||||||
Java обучение. Урок 2 If, Switch, Тернарный оператор Development in android |
|
|
||||||||||
Уроки Java для начинающих | #7 — Условные операторы |
|
|
||||||||||
Условный оператор (тернарный) на JAVA |
|
|
||||||||||
Java для начинающих. Урок 6: Условный оператор if. |
|
|
||||||||||
Java для начинающих. Урок 10: Оператор switch. |
|
|
||||||||||
8. JavaScript для начинающих. Тернарный оператор (Ternary operator) |
|
|
||||||||||
Java SE. Урок 10. Условный оператор if или оператор ветвления |
|
|
||||||||||
Java для тебя 9: битовые операции И, ИЛИ, НЕ, XOR |
|
|
||||||||||
День 4. Тернарный оператор в Java. |
|
|
||||||||||
Основы JavaScript. #12 Тернарный оператор. Switch case. |
Уроки Javascript с нуля. Урок 4 — Условные операторы if, else, else if. Тернарный оператор ? |
|
|
||||||||||
Урок 20 — тернарный оператор знак вопроса |
|
|
||||||||||
Основы Java. Урок 9: Побитовые (поразрядные) операторы Java |
|
|
||||||||||
Уроки C#. Тернарный оператор |
|
|
||||||||||
Программирование на C. Урок 11. Тернарный оператор |
|
|
||||||||||
Java для начинающих — Урок №5: Поразрядные операции и побитовые сдвиги |
|
|
||||||||||
Основы Java. Урок 11: Операторы сравнения Java» rel=»spf-prefetch |
Example — Nested Ternary
But what if our movie theater from above gives a discount to students and seniors?
We can nest ternary operators to test multiple conditions.
For this scenario assume tickets are: $12 for the general public, $8 for students, and $6 for seniors.
Here’s what the code for a Senior citizen would look like:
let isStudent = false;let isSenior = true;let price = isStudent ? 8 : isSenior ? 6 : 10console.log(price);// 6
There’s a lot going on in this code, so lets break it down:
- First we check to see if our patron is a student. Since is false, only the code after the first is executed. After the we have a new conditional:
- Our second conditional tests — since this is true, only the code after the but before the is executed.
- is then assigned the value of which which we later log to the screen.
Подробный разбор тернарного оператора
Первый операнд в тернарном операторе должен быть логическим или же представлять собой логическое выражение с результатом. Если первый операнд true, то тернарный оператор возвращает второй операнд, иначе (если первый операнд false) — возвращает третий операнд.
Синтаксис тернарного оператора в Java:
результат = выражение ? значение1 : значение2;
Если выражение true, то значение1 присваивается переменной результат, иначе значение2 присваивается переменной результат.
Давайте посмотрим использование тернарного оператора в небольшой Java-программе:
TernaryOperator.java
Java
package ua.com.prologistic.util;
public class TernaryOperator {
public static void main(String[] args) {
System.out.println(getMinValue(4,10));
System.out.println(getAbsoluteValue(-10));
System.out.println(invertBoolean(true));
String str = «Austria»;
String data = str.contains(«A») ? «Str содержит букву ‘A'» : «Str не содержит букву ‘A'»;
System.out.println(data);
int i = 10;
switch (i){
case 5:
System.out.println(«i=5»);
break;
case 10:
System.out.println(«i=10»);
break;
default:
System.out.println(«i не равно 5 или 10»);
}
System.out.println(
(i==5) ? «i=5»:((i==10) ? «i=10″:»i не равно 5 или 10»)
);
}
// инвертирует булевое значение:
// если b == true, то возвращает false, иначе возвращает true
private static boolean invertBoolean(boolean b) {
return b ? false : true;
}
private static int getAbsoluteValue(int i) {
return i
1 |
packageua.com.prologistic.util; publicclassTernaryOperator{ publicstaticvoidmain(Stringargs){ System.out.println(getMinValue(4,10)); System.out.println(getAbsoluteValue(-10)); System.out.println(invertBoolean(true)); Stringstr=»Austria»; Stringdata=str.contains(«A»)?»Str содержит букву ‘A'»»Str не содержит букву ‘A'»; System.out.println(data); inti=10; switch(i){ case5 System.out.println(«i=5»); break; case10 System.out.println(«i=10»); break; default System.out.println(«i не равно 5 или 10»); } System.out.println( (i==5)?»i=5″((i==10)?»i=10″»i не равно 5 или 10″) ); } // инвертирует булевое значение: // если b == true, то возвращает false, иначе возвращает true privatestaticbooleaninvertBoolean(booleanb){ returnb?falsetrue; } privatestaticintgetAbsoluteValue(inti){ returni?-ii; } privatestaticintgetMinValue(inti,intj){ return(ij)?ij; } } |
Результат выполнения программы:
Java
4
10
false
Str содержит букву ‘A’
i=10
i=10
1 |
4 Strсодержитбукву’A’ i=10 i=10 |
Как видим, тернарный оператор в Java используется для небольших выражений, упрощает код и уменьшает его количество.
5 ответов
99
Лучший ответ
Просматривая раздел 7.14 «Условные обозначения языка С# 5: Условный оператор», мы можем видеть следующее:
Другими словами: он пытается определить, может ли x и y быть преобразован в eachother, а если нет, возникает ошибка компиляции. В нашем случае и не имеют явного или неявного преобразования, поэтому он не будет компилироваться.
Сравните это с :
И, глядя на , мы видим, что он пытается найти общего предка, который будет служить типом, используемым для вызова, который присваивает ему значение . является приемлемым аргументом, поэтому вызов будет работать.
Ответ дал
05 фев. 2016, в 20:30
Поделиться
79
Данные ответы хороши; Я бы добавил к ним, что это правило С# является следствием более общего руководства по проектированию. При запросе вывести тип выражения из одного из нескольких вариантов, С# выбирает уникальные лучшие из них. То есть, если вы дадите С# некоторые варианты, такие как «Жираф, млекопитающее, животное», тогда он может выбрать самый общий — Animal — или он может выбрать наиболее специфичный — Жираф — в зависимости от обстоятельств. Но он должен выбрать один из вариантов, которые он фактически дал. С# никогда не говорит: «Мой выбор между Котом и Собакой, поэтому я выберу, что Animal — лучший выбор». Это был не выбор, поэтому С# не может его выбрать.
В случае тройного оператора С# пытается выбрать более общий тип int и string, но ни один из них не является более общим типом. Вместо того, чтобы выбирать тип, который не был выбран в первую очередь, подобно объекту, С# решает, что тип не может быть выведен.
Я также отмечаю, что это соответствует другому принципу дизайна С#: если что-то не так, расскажите разработчику. Язык не говорит: «Я собираюсь угадать, что вы имели в виду и путаться, если смогу». Язык говорит: «Я думаю, что вы написали что-то запутанное здесь, и я расскажу вам об этом».
Кроме того, я отмечаю, что С# не указывает на переменную на назначенное значение, а на другое направление. С# не говорит «вы назначаете объектную переменную, поэтому выражение должно быть конвертируемым в объект, поэтому я буду уверен, что оно». Скорее, С# говорит, что «это выражение должно иметь тип, и я должен уметь выводить, что тип совместим с объектом». Поскольку выражение не имеет типа, возникает ошибка.
Ответ дал
06 фев. 2016, в 00:35
Поделиться
22
Что касается части генериков:
В С# компилятор пытается преобразовать правые части выражения в некоторый общий тип; поскольку и — два разных построенных типа, нельзя преобразовать их в другой.
В Java компилятор пытается найти общий супертип вместо преобразования, поэтому компиляция кода подразумевает неявное использование wildcards и стирать стили;
имеет тип компиляции (на самом деле это может быть также или , в зависимости от контекста использования, поскольку они оба являются общими типичными супертипами) и тип времени выполнения raw (поскольку общий сырой супертип).
Например (проверьте его самостоятельно),
Ответ дал
05 фев. 2016, в 19:37
Поделиться
5
В Java и С# (и большинстве других языков) результат выражения имеет тип. В случае тройного оператора существуют два возможных подвыражения, оцененных для результата, и оба должны иметь один и тот же тип. В случае Java переменная может быть преобразована в путем автобоксинга. Теперь, поскольку оба и наследуются от , их можно преобразовать в один и тот же тип путем простого сужения преобразования.
С другой стороны, в С# a является примитивным и не подразумевается преобразование в или любое другое .
Ответ дал
05 фев. 2016, в 19:58
Поделиться
5
Это довольно просто. Нет никакого неявного преобразования между строкой и int. тройной оператор требует, чтобы последние два операнда имели один и тот же тип.
Try:
Ответ дал
05 фев. 2016, в 19:36
Поделиться
Ещё вопросы
- 1667Как создать файл Excel (.XLS и .XLSX) в C # без установки MS Office?
- 1197Статическое чтение только против const
- 933Алгоритм дерева суффиксов Укконена на простом английском
- 795Entity Framework 5 Обновление записи
- 507Что эквивалентно финалу Java в C #?
- 452У кого-нибудь есть тесты (код и результаты), сравнивающие производительность приложений Android, написанных на Xamarin C # и Java?
- 466Java эквивалентно #region в C #
- 4661Есть ли в Python троичный условный оператор?
- 26Есть ли в Matlab условный оператор IF, который можно поместить INLINE, как VBA IIF
- 234Как мне использовать условный оператор (? 🙂 в Ruby?
Expression Evaluation
When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.
We can test that out by writing a simple JUnit test case:
@Test public void whenConditionIsTrue_thenOnlyFirstExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 12 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(1); assertThat(exp2).isEqualTo(0); assertThat(result).isEqualTo(1); }
Our boolean expression 12 > 10 always evaluates to true, so the value of exp2 remained as-is. Similarly, let’s consider what happens for a false condition:
@Test public void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 8 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(0); assertThat(exp2).isEqualTo(1); assertThat(result).isEqualTo(1); }
The value of exp1 remained untouched, and the value of exp2 was incremented by 1.
Общий синтаксис
Учитывая эти примеры, видно, что общий синтаксис выглядит следующим образом:
result = testCondition ? value1 : value2
Как описано в Oracle documentation, логика применения состоит в том, что «Если testCondition имеет значение true, присвойте значение value1 результату; в противном случае присвойте значение value2 результату».
Вот еще два примера, которые демонстрируют это очень ясно. Вот пример использования значения с плавающей запятой:
// результату присваивается значение 1.0 float result = true ? 1.0f : 2.0f
Использования String:
// результату присваивается значение «Извини, чувак, это ложь».
String result = false ? "Dude, that was true" : "Sorry Dude, it's false";
testCondition может быть либо простым логическим значением, либо может быть оператором, который оценивает логическое значение, как оператор (a
Еще один пример, который я видел в исходном коде проекта под названием Abbot:
private static final int subMenuDelay = Platform.isOSX() ? 100 : 0;
Конструкция «IF (COND) THEN Statement (s) ELSE Statement (s)» сама по себе является выражением.
«COND ? Statement : Statement» является выражением, и, следовательно, может находиться справа от присваивания.
Можно использовать, чтобы избежать репликации вызова функции с большим количеством параметров: .
Далее приведен пример, в котором условный оператор встроен в строку, по существу используемый для правильного построения String в зависимости от того, является ли x единственным или множественным числом:
returnString = "There " + (x > 1 ? " are " + x + " cookies" : "is one cookie") + " in the jar."
Пример, демонстрирующих аналогичную операцию в String, на этот раз для правильного вывода приветствия для определенного пола человека:
returnString = "Thank you " + (person.isMale() ? "Mr. " : "Ms. ") + person.getLastName() + "."
Вот исходный код класса Java, который я использовал для тестирования некоторых примеров, показанных в этом руководстве:
public class JavaTernaryOperatorExamples { public static void main(String[] args) { // минимальное значение int minVal, a=3, b=2; minVal = a 1 ? " are " + x + " cookies" : "is one cookie") + " in the jar."; System.out.println(out); } }
Оцени статью
Оценить
Средняя оценка / 5. Количество голосов:
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Спасибо за ваши отзыв!
Оператор переключения в javaScript — switch
Оператор javascript служит для проверки переменной на множество значений:
Проверяется значение переменной или выражения: в каждом case проверяется одно из значений, в случае подходящего значения выполняется тот или иной блок операторов, соответствующий данному case.
Блок, начинающийся со служебного слова можно опустить. Операторы блока будут выполнены в случае, если ни одно из перечисленных значений во всех case не подходит.
Важно: Оператор обязателен после каждого рассмотренного значения переменной (после каждого case); если его не использовать, то будут выведены все, расположенные ниже операторы
Сравним с оператором IF:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var a = 2; switch(a) { case // if (a === 0) case 1 // if (a === 0) alert("Ноль или один"); // тогда выводим ... break; case 2 // if (a === 2) alert("Два"); // тогда выводим ... break; default // else alert("Много"); // иначе выводим ... } |
Как сгруппировать несколько вариантов?
Для выполнения одних и тех же операторов возможно группировка нескольких case. Как в примере выше:
... case case 1 alert("Ноль или один"); break; ... |
При и выполняется один и тот же оператор:
Пример 4: Запрашивать у пользователя ввести цвет. Выводить перевод на английский язык введенного цвета. Для цвета «синий» и «голубой» выдавать одно и то же значение.
Решение:
- Создайте веб-страницу с html-скелетом и тегом script.
- Инициализируйте переменную color значением, введенным пользователем в модальное окно:
var color = prompt("Какой цвет?"); |
Проверьте значение переменной с помощью конструкции switсh, выводя на каждое значение — соответствующий перевод:
2 3 4 5 6 7 8 9 |
switch (color) { case "красный" alert("red"); break; case "зеленый" alert("green"); break; // ... |
Если переменная color имеет значение «красный», то вывести в модальное окно перевод — «red» и выйти из конструкции (). Если переменная color имеет значение «зеленый», то вывести в модальное окно перевод — «green» и выйти из конструкции (break;).
Для цветов «синий» и «голубой» выполните группировку:
// ... case "синий" case "голубой" alert("blue"); break; // ... |
Если переменная color имеет значение «синий» или переменная color имеет значение «голубой», то вывести в модальное окно перевод — «blue» и выйти из конструкции ().
Организуйте вывод для тех цветов, которые не предусмотрены программой:
// ... default alert("y нас нет сведений по данному цвету") } // конец switch |
Протестируйте сценарий в браузере.
Задание Js 3_6. Найдите и исправьте ошибки в следующем фрагменте кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var number = prompt("Введите число 1 или 2:"); switch (number) { case "1" { document.write("Один"); }; break; case "2" { document.write("Два"); }; break; default { document.write("Вы ввели значение, отличное от 1 и 2"); }; } |
Задание Js 3_7. Что выведется на экране при выполнении следующего кода?:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var value = "2"; switch (value) { case "1" case "2" case "3" document.write("Hello"); break; case "4" case "5" document.write("World"); default document.write("Error"); } |
Задание Js 3_8. У пользователя запрашивать число – количество ворон на ветке. В зависимости от введенного числа (не более 10), выводить сообщение:
- На ветке сидит 1 ворона - На ветке сидит 4 вороны - На ветке сидит 10 ворон
Рекомендации:
- В зависимости от введенного числа, меняется окончание у слова «ворона».
- Для проверки использовать оператор javascript.
- Сохраните данную страницу в папке результатов (она пригодится для дальнейших работ).
↓
Вопросы для самоконтроля:
- В каком случае целесообразно в качестве условного оператора использовать конструкцию switch?
- Для чего служит блок в операторе switch?
- Обязательно ли использование оператора в конструкции switch?
- Как осуществляется группировка для нескольких вариантов значений в операторе switch?
Starting With the Basics — The if statement
Using a conditional, like an statement, allows us to specify that a certain block of code should be executed if a certain condition is met.
Consider the following example:
We have a object that consists of a , , and property.
let person = { name: 'tony', age: 20, driver: null};
We want to test if the age of our is greater than or equal to . If this is true, they’re old enough to drive and should say . If this is not true, should be set to .
We could use an statement to accomplish this:
if (person.age >= 16) { person.driver = 'Yes';} else { person.driver = 'No';}
But what if I told you we could do the same exact thing in just one line of code? Well, here it is:
person.driver = person.age >=16 ? 'Yes' : 'No';
This shorter code yields us the same result of
Now that you’ve seen the conditional ternary operator in action, we can explore how it works!
Example — Multiple operations
It is also possible to run multiple operations within a ternary. To do this, we must separate the operations with a comma. You can also, optionally, use parenthesis to help group your code:
let isStudent = true;let price = 12;isStudent ? ( price = 8, alert('Please check for student ID')) : ( alert('Enjoy the movie'));
In the above example, the of our movie is already set to $12. If is true, we adjust the price down to $8, then send an alert to have the cashier check for student ID. If is false, the above code is skipped, and we simply alert to enjoy the movie.
Closing Notes:
Thanks for reading! If you’re ready to finally learn Web Development, check out: The Ultimate Guide to Learning Full Stack Web Development in 6 months.
If you’re working towards becoming a better JavaScript Developer, check out: Ace Your Javascript Interview — Learn Algorithms + Data Structures.
Example — Driver Age
We’ll take a moment to revisit the initial example in this article:
let person = { name: 'tony', age: 20, driver: null};person.driver = person.age >=16 ? 'Yes' : 'No';
The most important thing to note is the order of operations. Lets add some parenthesis to help you visualize the order in which code is executing:
person.driver = ((person.age >=16) ? 'Yes' : 'No';)
As you can hopefully now visualize, the very first thing that happens is our conditional is checking to see if is or .
Since is greater than , this evaluates to . Here’s where we are now:
person.driver = (true ? 'Yes' : 'No';)
Since the condition of our conditional is , the value between the and is returned. In this case, that is .
Now that we have our return value, the final thing to do is to set it equal to our variable:
person.driver = 'Yes';
Awesome! Now lets move on to some more complex examples.
Инструкции If…Else
Посмотрим на следующий код, определяющий надежность пароля:
let strength = null;if (password.length > 7) { strength = 'Strong';} else { strength = 'Weak';}
Его цель очень проста — проверить, содержит ли пароль более 7 символов. Если да, то присвоить переменной значение , если нет — .
Предыдущий код можно сократить до следующего:
const strength = (password.length > 7) && 'Strong' || 'Weak';
Этот фрагмент кода делает то же самое, что и предыдущий, но в одной строке. Такой код уже выглядит довольно хорошо. Следующий фрагмент проверяет вычисление условного выражения.
let password = 'long_password';console.log(password.length > 7); // trueconsole.log(password.length > 7 && 'Strong'); // "Strong"console.log(password.length > 7 && 'Strong' || 'Weak'); // "Strong"password = 'short';console.log(password.length > 7); // falseconsole.log(password.length > 7 && 'Strong'); // falseconsole.log(password.length > 7 && 'Strong' || 'Weak'); // "Weak"
Для написания условных выражений такого рода существует способ получше — использование условного оператора, также называемого тернарным оператором. Его синтаксис выглядит следующим образом:
// If condition is truthy, evaluate and return A,// otherwise evaluate and return Bcondition ? A : B
Исходя из этого, предыдущий пример кода может быть переписан с использованием тернарного оператора как указано ниже:
const strength = (password.length > 7) ? 'Strong' : 'Weak';
Хотя фрагмент кода, использующий логические операторы, работает аналогично фрагменту кода с применением тернарного оператора (для данного примера), важно знать, что они не являются взаимозаменяемыми. Гораздо безопаснее использовать тернарный оператор для таких случаев, за исключением того, когда вы действительно знаете, что делаете
Гораздо безопаснее использовать тернарный оператор для таких случаев, за исключением того, когда вы действительно знаете, что делаете.
Рассмотрим следующий код, чтобы понять опасность применения логических операторов в подобных случаях:
// LOGICAL OPERATORS// If condition is truthy and A is truthy, return A,// otherwise evaluate and return B// Danger: A will never be returned if it is falsycondition && A || B// TERNARY OPERATOR// If condition is truthy, evaluate and return A,// otherwise evaluate and return Bcondition ? A : B
Вот еще одна хорошо известная условная инструкция, которая обычно встречается в кроссбраузерных AJAX-библиотеках.
let xmlhttp = null;if (window.XMLHttpRequest) { // Modern browsers xmlhttp = new XMLHttpRequest();} else if (window.ActiveXObject) { // Older versions of Internet Explorer (IE xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');}
При помощи логических операторов предыдущий фрагмент кода можно переписать следующим образом (отступы для читабельности):
const xmlhttp = window.XMLHttpRequest && new XMLHttpRequest() || window.ActiveXObject && new ActiveXObject('Microsoft.XMLHTTP') || null;
Используя тернарный оператор:
const xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : null;
Python Ternary Operator Example
Ternary operators in Python are terse conditional expressions. These are operators that test a condition and based on that, evaluate a value. This was made available since PEP 308 was approved and is available ever since version 2.4. This operator, if used properly, can reduce code size and enhance readability.Do you know about Python Comparison Operator
Let’s write code to compare two integers.
>>> a,b=2,3 >>> if a>b: print("a") else: print("b")
b
b. Equivalent code with Ternary operator
So let’s try doing the same with ternary operators:
>>> a,b=2,3 >>> print("a" if a>b else "b")
bVoila! Done in one line. Python first evaluates the condition. If true, it evaluates the first expression; otherwise, it evaluates the second. There is a lazy evaluation. It also evaluates the conditions left to right.You must learn about Python Data Structures