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('test', () => {
expect(f('yandex.ru')).toBe('https://yandex.ru');
expect(f('https://yandex.ru')).toBe('https://yandex.ru');
});Решение учителя откроется через:
20:00
