Что значит знак вопроса в java
Перейти к содержимому

Что значит знак вопроса в java

  • автор:

12.5. Java – Условный оператор ? : (вопросительный знак и двоеточие)

В предыдущем уроке мы рассмотрели условный оператор ? : (знак вопроса и двоеточие) в Java, который может быть использован для замены операторов if..else. Он имеет следующий общий вид:

Exp1 ? Exp2 : Exp3; 

Где Exp1, Exp2 и Exp3 являются выражениями. Обратите внимание на использование и размещение двоеточия.

Чтобы определить значение всего выражения, сперва нужно оценить Exp1:

  • Если значение Exp1 верно, то значение Exp2 будет значением всего выражения.
  • Если значение Exp1 ложно, то вычисляется Exp3 и его значение становится значением всего выражения.

Оглавление

  • 1. Java – Самоучитель для начинающих
  • 2. Java – Обзор языка
  • 3. Java – Установка и настройка
  • 4. Java – Синтаксис
  • 5. Java – Классы и объекты
  • 6. Java – Конструкторы
  • 7. Java – Типы данных и литералы
  • 8. Java – Типы переменных
  • 9. Java – Модификаторы
  • 10. Java – Операторы
  • 11. Java – Циклы и операторы цикла
  • 11.1. Java – Цикл while
  • 11.2. Java – Цикл for
  • 11.3. Java – Улучшенный цикл for
  • 11.4. Java – Цикл do..while
  • 11.5. Java – Оператор break
  • 11.6. Java – Оператор continue
  • 12. Java – Операторы принятия решений
  • 12.1. Java – Оператор if
  • 12.2. Java – Оператор if..else
  • 12.3. Java – Вложенный оператор if
  • 12.4. Java – Оператор switch..case
  • 12.5. Java – Условный оператор (? 🙂
  • 13. Java – Числа
  • 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
  • 13.2. Java – Метод compareTo()
  • 13.3. Java – Метод equals()
  • 13.4. Java – Метод valueOf()
  • 13.5. Java – Метод toString()
  • 13.6. Java – Метод parseInt()
  • 13.7. Java – Метод Math.abs()
  • 13.8. Java – Метод Math.ceil()
  • 13.9. Java – Метод Math.floor()
  • 13.10. Java – Метод Math.rint()
  • 13.11. Java – Метод Math.round()
  • 13.12. Java – Метод Math.min()
  • 13.13. Java – Метод Math.max()
  • 13.14. Java – Метод Math.exp()
  • 13.15. Java – Метод Math.log()
  • 13.16. Java – Метод Math.pow()
  • 13.17. Java – Метод Math.sqrt()
  • 13.18. Java – Метод Math.sin()
  • 13.19. Java – Метод Math.cos()
  • 13.20. Java – Метод Math.tan()
  • 13.21. Java – Метод Math.asin()
  • 13.22. Java – Метод Math.acos()
  • 13.23. Java – Метод Math.atan()
  • 13.24. Java – Метод Math.atan2()
  • 13.25. Java – Метод Math.toDegrees()
  • 13.26. Java – Метод Math.toRadians()
  • 13.27. Java – Метод Math.random()
  • 14. Java – Символы
  • 14.1. Java – Метод Character.isLetter()
  • 14.2. Java – Метод Character.isDigit()
  • 14.3. Java – Метод Character.isWhitespace()
  • 14.4. Java – Метод Character.isUpperCase()
  • 14.5. Java – Метод Character.isLowerCase()
  • 14.6. Java – Метод Character.toUpperCase()
  • 14.7. Java – Метод Character.toLowerCase()
  • 14.8. Java – Метод Character.toString()
  • 15. Java – Строки
  • 15.1. Java – Метод charAt()
  • 15.2. Java – Метод compareTo()
  • 15.3. Java – Метод compareToIgnoreCase()
  • 15.4. Java – Метод concat()
  • 15.5. Java – Метод contentEquals()
  • 15.6. Java – Метод copyValueOf()
  • 15.7. Java – Метод endsWith()
  • 15.8. Java – Метод equals()
  • 15.9. Java – Метод equalsIgnoreCase()
  • 15.10. Java – Метод getBytes()
  • 15.11. Java – Метод getChars()
  • 15.12. Java – Метод hashCode()
  • 15.13. Java – Метод indexOf()
  • 15.14. Java – Метод intern()
  • 15.15. Java – Метод lastIndexOf()
  • 15.16. Java – Метод length()
  • 15.17. Java – Метод matches()
  • 15.18. Java – Метод regionMatches()
  • 15.19. Java – Метод replace()
  • 15.20. Java – Метод replaceAll()
  • 15.21. Java – Метод replaceFirst()
  • 15.22. Java – Метод split()
  • 15.23. Java – Метод startsWith()
  • 15.24. Java – Метод subSequence()
  • 15.25. Java – Метод substring()
  • 15.26. Java – Метод toCharArray()
  • 15.27. Java – Метод toLowerCase()
  • 15.28. Java – Метод toString()
  • 15.29. Java – Метод toUpperCase()
  • 15.30. Java – Метод trim()
  • 15.31. Java – Метод valueOf()
  • 15.32. Java – Классы StringBuilder и StringBuffer
  • 15.32.1. Java – Метод append()
  • 15.32.2. Java – Метод reverse()
  • 15.32.3. Java – Метод delete()
  • 15.32.4. Java – Метод insert()
  • 15.32.5. Java – Метод replace()
  • 16. Java – Массивы
  • 17. Java – Дата и время
  • 18. Java – Регулярные выражения
  • 19. Java – Методы
  • 20. Java – Потоки ввода/вывода, файлы и каталоги
  • 20.1. Java – Класс ByteArrayInputStream
  • 20.2. Java – Класс DataInputStream
  • 20.3. Java – Класс ByteArrayOutputStream
  • 20.4. Java – Класс DataOutputStream
  • 20.5. Java – Класс File
  • 20.6. Java – Класс FileReader
  • 20.7. Java – Класс FileWriter
  • 21. Java – Исключения
  • 21.1. Java – Встроенные исключения
  • 22. Java – Вложенные и внутренние классы
  • 23. Java – Наследование
  • 24. Java – Переопределение
  • 25. Java – Полиморфизм
  • 26. Java – Абстракция
  • 27. Java – Инкапсуляция
  • 28. Java – Интерфейсы
  • 29. Java – Пакеты
  • 30. Java – Структуры данных
  • 30.1. Java – Интерфейс Enumeration
  • 30.2. Java – Класс BitSet
  • 30.3. Java – Класс Vector
  • 30.4. Java – Класс Stack
  • 30.5. Java – Класс Dictionary
  • 30.6. Java – Класс Hashtable
  • 30.7. Java – Класс Properties
  • 31. Java – Коллекции
  • 31.1. Java – Интерфейс Collection
  • 31.2. Java – Интерфейс List
  • 31.3. Java – Интерфейс Set
  • 31.4. Java – Интерфейс SortedSet
  • 31.5. Java – Интерфейс Map
  • 31.6. Java – Интерфейс Map.Entry
  • 31.7. Java – Интерфейс SortedMap
  • 31.8. Java – Класс LinkedList
  • 31.9. Java – Класс ArrayList
  • 31.10. Java – Класс HashSet
  • 31.11. Java – Класс LinkedHashSet
  • 31.12. Java – Класс TreeSet
  • 31.13. Java – Класс HashMap
  • 31.14. Java – Класс TreeMap
  • 31.15. Java – Класс WeakHashMap
  • 31.16. Java – Класс LinkedHashMap
  • 31.17. Java – Класс IdentityHashMap
  • 31.18. Java – Алгоритмы Collection
  • 31.19. Java – Iterator и ListIterator
  • 31.20. Java – Comparator
  • 32. Java – Дженерики
  • 33. Java – Сериализация
  • 34. Java – Сеть
  • 34.1. Java – Обработка URL
  • 35. Java – Отправка Email
  • 36. Java – Многопоточность
  • 36.1. Java – Синхронизация потоков
  • 36.2. Java – Межпоточная связь
  • 36.3. Java – Взаимная блокировка потоков
  • 36.4. Java – Управление потоками
  • 37. Java – Основы работы с апплетами
  • 38. Java – Javadoc

Что значит знак вопроса в контейнере?

al_gon

android

  • Android
  • +2 ещё

Почему при сворачивание приложения оно не развёртывается?

  • 1 подписчик
  • 18 часов назад
  • 37 просмотров

java

  • Java
  • +2 ещё

Почему localhost:8080 всегда выдает пустую страницу?

  • 1 подписчик
  • 22 часа назад
  • 46 просмотров

java

  • Java
  • +1 ещё

Как добавить записи в две таблицы в Hibernate?

  • 1 подписчик
  • вчера
  • 15 просмотров

android

  • Android
  • +2 ещё

Почему FindLibrary выдает 0x0?

  • 1 подписчик
  • 28 окт.
  • 70 просмотров

java

  • Java
  • +1 ещё

Как POJO влияет на производительность приложения?

  • 1 подписчик
  • 26 окт.
  • 122 просмотра

java

  • Java
  • +1 ещё

Передача ссылки на TG зная только chatId на Java?

  • 1 подписчик
  • 26 окт.
  • 61 просмотр

java

  • Java

Как сделать задание на Java?

  • 1 подписчик
  • 25 окт.
  • 149 просмотров

java

  • Java

Как добавить jnativehook в проект в intellij IDEA?

  • 1 подписчик
  • 24 окт.
  • 45 просмотров

java

  • Java
  • +1 ещё

Как в зависимости от значения вставлять разные ссылки в Thymeleaf?

  • 1 подписчик
  • 22 окт.
  • 43 просмотра

java

  • Java

Как сделать методы класса доступными только для одного класса?

  • 1 подписчик
  • 21 окт.
  • 106 просмотров

от 200 000 ₽

от 180 000 до 350 000 ₽

от 200 000 до 350 000 ₽

30 окт. 2023, в 11:17

5000 руб./за проект

30 окт. 2023, в 11:13

2000 руб./за проект

30 окт. 2023, в 11:13

6000 руб./за проект

Минуточку внимания

Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями

  • Почему не работает центр обновлений WINDOWS?
    • 2 подписчика
    • 1 ответ
    • 2 подписчика
    • 3 ответа
    • 3 подписчика
    • 0 ответов
    • 3 подписчика
    • 1 ответ
    • 2 подписчика
    • 3 ответа
    • 2 подписчика
    • 0 ответов
    • 2 подписчика
    • 0 ответов
    • 2 подписчика
    • 3 ответа
    • 2 подписчика
    • 1 ответ
    • 2 подписчика
    • 0 ответов

    Условное ветвление: if, ‘?’

    Иногда нам нужно выполнить различные действия в зависимости от условий.

    Для этого мы можем использовать инструкцию if и условный оператор ? , который также называют оператором «вопросительный знак».

    Инструкция «if»

    Инструкция if(. ) вычисляет условие в скобках и, если результат true , то выполняет блок кода.

    let year = prompt('В каком году была опубликована спецификация ECMAScript-2015?', ''); if (year == 2015) alert( 'Вы правы!' );

    В примере выше, условие – это простая проверка на равенство ( year == 2015 ), но оно может быть и гораздо более сложным.

    Если мы хотим выполнить более одной инструкции, то нужно заключить блок кода в фигурные скобки:

    if (year == 2015)

    Мы рекомендуем использовать фигурные скобки <> всегда, когда вы используете инструкцию if , даже если выполняется только одна команда. Это улучшает читаемость кода.

    Преобразование к логическому типу

    Инструкция if (…) вычисляет выражение в скобках и преобразует результат к логическому типу.

    Давайте вспомним правила преобразования типов из главы Преобразование типов:

    • Число 0 , пустая строка «» , null , undefined и NaN становятся false . Из-за этого их называют «ложными» («falsy») значениями.
    • Остальные значения становятся true , поэтому их называют «правдивыми» («truthy»).

    Таким образом, код при таком условии никогда не выполнится:

    if (0) < // 0 is falsy . >

    …а при таком – выполнится всегда:

    if (1) < // 1 is truthy . >

    Мы также можем передать заранее вычисленное в переменной логическое значение в if , например так:

    let condition = (year == 2015); // преобразуется к true или false if (condition)

    Блок «else»

    Инструкция if может содержать необязательный блок «else» («иначе»). Он выполняется, когда условие ложно.

    let year = prompt('В каком году была опубликована спецификация ECMAScript-2015?', ''); if (year == 2015) < alert( 'Да вы знаток!' ); >else < alert( 'А вот и неправильно!' ); // любое значение, кроме 2015 >

    Несколько условий: «else if»

    Иногда нужно проверить несколько вариантов условия. Для этого используется блок else if .

    let year = prompt('В каком году была опубликована спецификация ECMAScript-2015?', ''); if (year < 2015) < alert( 'Это слишком рано. ' ); >else if (year > 2015) < alert( 'Это поздновато' ); >else

    В приведённом выше коде JavaScript сначала проверит year < 2015 . Если это неверно, он переходит к следующему условию year >2015 . Если оно тоже ложно, тогда сработает последний alert .

    Блоков else if может быть и больше. Присутствие блока else не является обязательным.

    Условный оператор „?“

    Иногда нам нужно определить переменную в зависимости от условия.

    let accessAllowed; let age = prompt('Сколько вам лет?', ''); if (age > 18) < accessAllowed = true; >else < accessAllowed = false; >alert(accessAllowed);

    Так называемый «условный» оператор «вопросительный знак» позволяет нам сделать это более коротким и простым способом.

    Оператор представлен знаком вопроса ? . Его также называют «тернарный», так как этот оператор, единственный в своём роде, имеет три аргумента.

    let result = условие ? значение1 : значение2;

    Сначала вычисляется условие : если оно истинно, тогда возвращается значение1 , в противном случае – значение2 .

    let accessAllowed = (age > 18) ? true : false;

    Технически, мы можем опустить круглые скобки вокруг age > 18 . Оператор вопросительного знака имеет низкий приоритет, поэтому он выполняется после сравнения > .

    Этот пример будет делать то же самое, что и предыдущий:

    // оператор сравнения "age > 18" выполняется первым в любом случае // (нет необходимости заключать его в скобки) let accessAllowed = age > 18 ? true : false;

    Но скобки делают код более простым для восприятия, поэтому мы рекомендуем их использовать.

    На заметку:

    В примере выше вы можете избежать использования оператора вопросительного знака ? , т.к. сравнение само по себе уже возвращает true/false :

    // то же самое let accessAllowed = age > 18;

    Несколько операторов „?“

    Последовательность операторов вопросительного знака ? позволяет вернуть значение, которое зависит от более чем одного условия.

    let age = prompt('Возраст?', 18); let message = (age < 3) ? 'Здравствуй, малыш!' : (age < 18) ? 'Привет!' : (age < 100) ? 'Здравствуйте!' : 'Какой необычный возраст!'; alert( message );

    Поначалу может быть сложно понять, что происходит. Но при ближайшем рассмотрении мы видим, что это обычная последовательная проверка:

    1. Первый знак вопроса проверяет age < 3 .
    2. Если верно – возвращает 'Здравствуй, малыш!' . В противном случае, проверяет выражение после двоеточия „:“, вычисляет age < 18 .
    3. Если это верно – возвращает 'Привет!' . В противном случае, проверяет выражение после следующего двоеточия „:“, вычисляет age < 100 .
    4. Если это верно – возвращает 'Здравствуйте!' . В противном случае, возвращает выражение после последнего двоеточия – 'Какой необычный возраст!' .

    Вот как это выглядит при использовании if..else :

    if (age < 3) < message = 'Здравствуй, малыш!'; >else if (age < 18) < message = 'Привет!'; >else if (age < 100) < message = 'Здравствуйте!'; >else

    Нетрадиционное использование „?“

    Иногда оператор «вопросительный знак» ? используется в качестве замены if :

    let company = prompt('Какая компания создала JavaScript?', ''); (company == 'Netscape') ? alert('Верно!') : alert('Неправильно.');

    В зависимости от условия company == 'Netscape' , будет выполнена либо первая, либо вторая часть после ? .

    Здесь мы не присваиваем результат переменной. Вместо этого мы выполняем различный код в зависимости от условия.

    Не рекомендуется использовать оператор вопросительного знака таким образом.

    Несмотря на то, что такая запись короче, чем эквивалентная инструкция if , она хуже читается.

    Вот, для сравнения, тот же код, использующий if :

    let company = prompt('Какая компания создала JavaScript?', ''); if (company == 'Netscape') < alert('Верно!'); >else

    При чтении глаза сканируют код по вертикали. Блоки кода, занимающие несколько строк, воспринимаются гораздо легче, чем длинный горизонтальный набор инструкций.

    Смысл оператора «вопросительный знак» ? – вернуть то или иное значение, в зависимости от условия. Пожалуйста, используйте его именно для этого. Когда вам нужно выполнить разные ветви кода – используйте if .

    Задачи

    if (строка с нулём)

    важность: 5

    Выведется ли alert ?

    if ("0")

    Да, выведется.

    Любая строка, кроме пустой (а строка "0" – не пустая), в логическом контексте становится true .

    Можно запустить и проверить:

    if ("0")

    Название JavaScript

    важность: 2

    Используя конструкцию if..else , напишите код, который будет спрашивать: „Какое «официальное» название JavaScript?“

    Если пользователь вводит «ECMAScript», то показать: «Верно!», в противном случае – отобразить: «Не знаете? ECMAScript!»

    Что означает знак вопроса в строке comment?.author

    Для чего ставится знак вопроса перед точкой при обращении к свойству объекта?

    • Количеству голосов ▼
    • Дата создания

    13 июля 2022

    Этот оператор называется "оператор опциональной последовательности". Он позволяет обращаться в нутренним свойствам объекта, без риска что родительское свойство отсутствует в объекте. Чтобы лучше это понять, разберем пример.

    Предположим у нас есть сущности пользователей с их адресами в виде объектов по типу:

    const user =  name: 'Ivan', age: 29, address:  country: 'Russia', city: 'Perm', street: 'Leonova', >, >; 

    Предположим мы хотим сформировать строку содержащую страну и город пользователя Russia, Perm . Для этого мы просто обращаемся к внутренним ключам объекта в ключе address :

    const result = `$user.address.country>, $user.address.city>`; console.log(result); // => Russia, Perm 

    Но что если у нас будет пользователь с отсутствующим адресом? Такой код выдаст ошибку, потому что мы попытались обратиться к свойствам country и city у значения undefined :

    ; const result = `$, $`; // TypeError: Cannot read properties of undefined (reading 'country') console.log(result); 

    У объекта user нет свойства address , поэтому мы не можем к обратиться к нему. Чтобы избежать такой ошибки, используется оператор опциональной последовательности: добавляется знак вопроса после свойства, которого может не быть в объекте. Такой код уже не выдаст ошибку:

    ; const result = `$, $`; console.log(result); // => undefined, undefined 

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *