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'Полезное
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'Полезное
Ваше упражнение проверяется по этим тестам
import { expect, test } from "vitest";
import f from "./index.js";
test("if else", () => {
expect(f("yandex.ru")).toBe("https://yandex.ru");
expect(f("https://yandex.ru")).toBe("https://yandex.ru");
});Решение учителя откроется через:
20:00
