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

Конструкция else if

JavaScript: Конструкция else if

Функция getTypeOfSentence() из предыдущего урока различает только вопросительные и обычные предложения. Давайте попробуем добавить поддержку восклицательных предложений:

const getTypeOfSentence = (sentence) => {
  const lastChar = sentence[sentence.length - 1];
  let sentenceType;

  if (lastChar === '!') {
    sentenceType = 'exclamation';
  } else {
    sentenceType = 'normal';
  }

  if (lastChar === '?') {
    sentenceType = 'question';
  }

  return `Sentence is ${sentenceType}`;
};

getTypeOfSentence('Who?'); // Sentence is question
getTypeOfSentence('No');   // Sentence is normal
getTypeOfSentence('No!');  // Sentence is exclamation

Мы добавили ещё одну проверку ("exclamation" переводится «восклицание»). Технически функция работает, но с точки зрения семантики есть проблемы.

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

Правильнее будет воспользоваться ещё одной возможностью условной конструкции:

const getTypeOfSentence = (sentence) => {
  const lastChar = sentence[sentence.length - 1];
  let sentenceType;

  if (lastChar === '?') {
    sentenceType = 'question';
  } else if (lastChar === '!') {
    sentenceType = 'exclamation';
  } else {
    sentenceType = 'normal';
  }

  return `Sentence is ${sentenceType}`;
};

getTypeOfSentence('Who?'); // Sentence is question
getTypeOfSentence('No');   // Sentence is normal
getTypeOfSentence('No!');  // Sentence is exclamation

Теперь все условия выстроены в единую конструкцию. else if — это «если не выполнено предыдущее условие, но выполнено текущее».

┌─────────────────┐
  │ условие 1?      │
  └────┬────────┬───┘
  true │        │ false
       ↓        ↓
┌──────────┐  ┌─────────────────┐
│ тело if  │  │ условие 2?      │
└──────────┘  └────┬────────┬───┘
              true │        │ false
                   ↓        ↓
           ┌────────────┐ ┌──────────┐
           │тело else if│ │ тело else│
           └────────────┘ └──────────┘

Логика функции: получается такая схема:

  • если последний символ это ?, то 'question'
  • иначе, если последний символ это !, то 'exclamation'
  • иначе 'normal'

Выполнится только один из блоков кода, относящихся ко всей конструкции if.

Задание

Реализуйте функцию getTrafficLightAction(color), которая принимает цвет светофора и возвращает, что нужно делать водителю:

  • 'green' → 'go'
  • 'yellow' → 'slow down'
  • 'red' → 'stop'
  • любой другой цвет → 'unknown'
getTrafficLightAction('green');  // => 'go'
getTrafficLightAction('red');    // => 'stop'
getTrafficLightAction('purple'); // => 'unknown'
Коммерческий опыт и Трудоустройство

Полезное

  • else if

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

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

Конструкция else if

JavaScript: Конструкция else if

Функция getTypeOfSentence() из предыдущего урока различает только вопросительные и обычные предложения. Давайте попробуем добавить поддержку восклицательных предложений:

const getTypeOfSentence = (sentence) => {
  const lastChar = sentence[sentence.length - 1];
  let sentenceType;

  if (lastChar === '!') {
    sentenceType = 'exclamation';
  } else {
    sentenceType = 'normal';
  }

  if (lastChar === '?') {
    sentenceType = 'question';
  }

  return `Sentence is ${sentenceType}`;
};

getTypeOfSentence('Who?'); // Sentence is question
getTypeOfSentence('No');   // Sentence is normal
getTypeOfSentence('No!');  // Sentence is exclamation

Мы добавили ещё одну проверку ("exclamation" переводится «восклицание»). Технически функция работает, но с точки зрения семантики есть проблемы.

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

Правильнее будет воспользоваться ещё одной возможностью условной конструкции:

const getTypeOfSentence = (sentence) => {
  const lastChar = sentence[sentence.length - 1];
  let sentenceType;

  if (lastChar === '?') {
    sentenceType = 'question';
  } else if (lastChar === '!') {
    sentenceType = 'exclamation';
  } else {
    sentenceType = 'normal';
  }

  return `Sentence is ${sentenceType}`;
};

getTypeOfSentence('Who?'); // Sentence is question
getTypeOfSentence('No');   // Sentence is normal
getTypeOfSentence('No!');  // Sentence is exclamation

Теперь все условия выстроены в единую конструкцию. else if — это «если не выполнено предыдущее условие, но выполнено текущее».

┌─────────────────┐
  │ условие 1?      │
  └────┬────────┬───┘
  true │        │ false
       ↓        ↓
┌──────────┐  ┌─────────────────┐
│ тело if  │  │ условие 2?      │
└──────────┘  └────┬────────┬───┘
              true │        │ false
                   ↓        ↓
           ┌────────────┐ ┌──────────┐
           │тело else if│ │ тело else│
           └────────────┘ └──────────┘

Логика функции: получается такая схема:

  • если последний символ это ?, то 'question'
  • иначе, если последний символ это !, то 'exclamation'
  • иначе 'normal'

Выполнится только один из блоков кода, относящихся ко всей конструкции if.

Задание

Реализуйте функцию getTrafficLightAction(color), которая принимает цвет светофора и возвращает, что нужно делать водителю:

  • 'green' → 'go'
  • 'yellow' → 'slow down'
  • 'red' → 'stop'
  • любой другой цвет → 'unknown'
getTrafficLightAction('green');  // => 'go'
getTrafficLightAction('red');    // => 'stop'
getTrafficLightAction('purple'); // => 'unknown'
Коммерческий опыт и Трудоустройство

Полезное

  • else if

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

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

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

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

test('else if', () => {
  expect(f('green')).toBe('go');
  expect(f('yellow')).toBe('slow down');
  expect(f('red')).toBe('stop');
  expect(f('blue')).toBe('unknown');
  expect(f('purple')).toBe('unknown');
});
← ПредыдущийСледующий →

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

20:00

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