Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс JavaScript
/

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

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

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

Задание

Кнопка в приложении работает как переключатель: каждое нажатие меняет состояние на противоположное. Реализуйте функцию flipFlop(str): если строка равна 'flip', вернуть 'flop'; в противном случае вернуть 'flip'.

flipFlop('flip'); // => 'flop'
flipFlop('flop'); // => 'flip'

Используйте тернарный оператор.

Коммерческий опыт и Трудоустройство

Полезное

  • Подробнее о тернарном операторе

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс JavaScript
/

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

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

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

Задание

Кнопка в приложении работает как переключатель: каждое нажатие меняет состояние на противоположное. Реализуйте функцию flipFlop(str): если строка равна 'flip', вернуть 'flop'; в противном случае вернуть 'flip'.

flipFlop('flip'); // => 'flop'
flipFlop('flop'); // => 'flip'

Используйте тернарный оператор.

Коммерческий опыт и Трудоустройство

Полезное

  • Подробнее о тернарном операторе

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

import { expect, test } from 'vitest';
import f from './index.js';

test('ternary operator', () => {
  expect(f('flip')).toBe('flop');
  expect(f('flop')).toBe('flip');
  expect(f('hello')).toBe('flip');
});
← ПредыдущийСледующий →

Решение учителя откроется через:

20:00

waiting_clock
← ПредыдущийСледующий →