JavaScript: Возврат значений
В этом уроке мы научимся писать функции, которые возвращают значения. Такие функции отдают результат своей работы, как будто говорят: «Вот, держи, я посчитала».
Например, функция может вернуть строку с обработанным текстом или число, вычисленное по формуле. Возвращённое значение можно использовать дальше: сохранить в переменную, передать в другую функцию или вывести на экран.
Чтобы функция отдала результат, используется специальное ключевое слово return. Оно завершает выполнение функции и указывает, что именно нужно вернуть.
Вот функция, которая делает текст заглавным:
function shout(name) {
return name.toUpperCase();
}
const result = shout('hexlet');
console.log(result); // => HEXLET
const result2 = shout('code-basics');
console.log(result2); // => CODE-BASICSПри вызове shout('hexlet') сначала выполняется выражение name.toUpperCase(), оно возвращает строку 'HEXLET'. Затем return отдаёт это значение наружу — туда, откуда была вызвана функция. В нашем случае оно сохраняется в переменную result, а потом выводится на экран.
Разница между return и console.log
В отличие от console.log(), return ничего не печатает. Он просто возвращает значение, а решение о том, что с ним делать, принимает вызывающий код.
// Эта функция выводит, но ничего не возвращает
function printSum(a, b) {
console.log(a + b);
}
// Эта функция возвращает результат
function getSum(a, b) {
return a + b;
}
// Возвращённый результат можно использовать дальше
const sum = getSum(3, 4);
console.log(sum * 2); // => 14Возврат вычисленного выражения
В return обычно указывают выражение, которое сначала вычисляется, а потом результат передаётся наружу:
function fullName(first, last) {
return `${first} ${last}`;
}
const name = fullName('Aria', 'Stark');
console.log(name); // => Aria StarkСначала вычисляется шаблонная строка, и уже готовое значение возвращается наружу.
Многострочные функции
Иногда в теле функции нужно сделать несколько шагов, прежде чем получить результат. Тогда пишут несколько строк, а в конце используют return. Например, функция форматирует имя: убирает пробелы по краям и переводит буквы в верхний регистр.
function formatName(name) {
const clean = name.trim();
const uppercased = clean.toUpperCase();
return uppercased;
}
console.log(formatName(' hexlet ')); // => HEXLETКод после return
Когда выполнение доходит до return, функция немедленно завершается. Всё, что написано после него внутри функции, не выполнится:
function example() {
return 'готово';
console.log('этот код никогда не выполнится');
}
console.log(example()); // => готовоПоэтому return обычно пишут в конце логики. Позже, когда мы дойдём до условных конструкций, вы увидите, что таких «концов» внутри одной функции может быть несколько.
Задание
Допишите функцию truncate(), которая обрезает переданную строку до указанного количества символов, добавляет в конце многоточие и возвращает получившуюся строку. Подобная логика часто используется на сайтах, чтобы отобразить длинный текст в сокращенном виде.
Функция принимает два параметра:
- Строка, которую нужно обрезать
- Число символов, которые нужно оставить
Пример того, как должна работать написанная вами функция:
// Передаём текст напрямую
// Обрезаем текст, оставляя 2 символа
truncate('hexlet', 2); // he...
// Через переменную
const text = 'it works!';
// Обрезаем текст, оставляя 4 символа
truncate(text, 4); // it w...Вам нужно самостоятельно реализовать функцию truncate(), в JavaScript такой функции не существует. Реализовать эту функцию можно различными способами, подскажем лишь один из них. Для решения этим способом вам понадобится взять подстроку из строки, переданной первым параметром в функцию. Используйте для этого метод slice(). Подумайте, исходя из задания, с какого индекса и по какой вам надо извлечь подстроку?
const word = 'welcome';
// Передавать параметры в метод можно через переменные
const index = 3;
word.slice(0, index); // welС точки зрения проверочной системы не имеет значения, каким из способов будет реализована функция truncate() внутри, главное – чтобы она выполняла поставленную задачу
Полезное
Ваше упражнение проверяется по этим тестам
// @ts-check
import { expect, test } from 'vitest';
import f from './index.js';
test('return', () => {
expect(f('text', 3)).toBe('tex...');
expect(f('hexlet learning', 6)).toBe('hexlet...');
});Решение учителя откроется через:
20:00
