Основы JavaScript

Теория: Тернарный оператор

Посмотрите на определение функции, которая возвращает модуль переданного числа:

const abs = (number) => {
  if (number >= 0) {
    return number
  }

  return -number
}

abs(10) // 10
abs(-10) // 10

Можно ли записать ее лаконичнее? Что-то вроде return <ответ в зависимости от условия>? Для этого справа от return должно быть выражение, но if — это инструкция, а не выражение.

В JavaScript существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор.

Тернарный оператор — единственный в своем роде оператор, требующий три операнда:

const abs = (number) => {
  return number >= 0 ? number : -number
}

Общий паттерн выглядит так: <predicate> ? <expression on true> : <expression on false>.

Тернарный оператор

Сокращенный вариант функции abs() выглядит так:

const abs = number => (number >= 0 ? number : -number)

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

Давайте перепишем начальный вариант getTypeOfSentence() аналогично:

Было:

const getTypeOfSentence = (sentence) => {
  const lastChar = sentence.slice(-1)

  if (lastChar === '?') {
    return 'question'
  }

  return 'normal'
}

Стало:

const getTypeOfSentence = (sentence) => {
  const lastChar = sentence.slice(-1)

  return (lastChar === '?') ? 'question' : 'normal'
}

getTypeOfSentence('Hodor') // normal
getTypeOfSentence('Hodor?') // question

Если вы помните, в чем сила выражений, то вероятно уже догадались, что тернарный оператор можно вкладывать в тернарный оператор. Не делайте этого :) Такой код тяжело и читать, и отлаживать, это очень плохая практика.

Рекомендуемые программы

Дальше

Завершено

0 / 39

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845