JavaScript: else

Напишем функцию getTypeOfSentence(), которая анализирует текст и возвращает описание его тона: для обычных предложений – General sentence, для вопросительных – Question sentence.

getTypeOfSentence('Hodor');  // General sentence
  getTypeOfSentence('Hodor?'); // Question sentence

Реализация функции:

const getTypeOfSentence = (sentence) => {
  // Объявляем переменную, в которую запишем тип предложения
  let sentenceType;
  // Предикат, проверяющий окончание текста
  // Если он оканчивается на символ '?', то вернётся true,
  // иначе false
  if (sentence.endsWith('?')) {
    // Если условие выше сработало,
    // то это вопросительное предложение.
    // Присваиваем sentenceType соответствующее значение.
    sentenceType = 'Question';
  } else {
    // Во всех остальных случаях предложение — обычное
    sentenceType = 'General';
  }

  // С помощью интерполяции формируем строку
  return `${sentenceType} sentence`;
};

Мы добавили ключевое слово else и новый блок с фигурными скобками. Этот блок выполнится, только если условие в if — ложь.

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

Вложенные условия

В блок else (как и в блок if) можно вкладывать другие условия. Благодаря фигурным скобкам вложенность всегда видна явно:

const number = 10;

if (number > 10) {
  console.log('Number is greater than 10');
} else {
  if (number === 10) {
    console.log('Number is exactly 10');
  } else {
    console.log('Number is less than 10');
  }
}
// => Number is exactly 10

Здесь сначала проверяется number > 10. Условие ложно, поэтому управление переходит в else, где проверяется вложенное условие number === 10. Оно истинно — печатается Number is exactly 10.

Существует два способа оформления конструкции if-else. С помощью отрицания можно изменить порядок блоков:

const getTypeOfSentence = (sentence) => {
  let sentenceType;
  // Добавилось отрицание
  // Содержимое else переехало в if и наоборот
  if (!sentence.endsWith('?')) {
    sentenceType = 'General';
  } else {
    sentenceType = 'Question';
  }

  return `${sentenceType} sentence`;
};

Какой способ предпочтительнее? Человеческому мозгу проще мыслить прямолинейно, а не через отрицание. Старайтесь выбирать проверку, которая не содержит отрицаний, и подстраивайте содержимое блоков под неё.

Задание

Напишите функцию normalizeUrl(url), которая принимает строку с адресом сайта и возвращает URL с протоколом https://.

Если строка уже начинается с https:// — вернуть как есть. Если не начинается — добавить https:// в начало.

normalizeUrl('https://hexlet.io'); // => 'https://hexlet.io'
normalizeUrl('hexlet.io');         // => 'https://hexlet.io'

Полезное

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

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