В программировании большое количество функций и методов имеют параметры, которые редко меняются. В таких случаях этим параметрам задают значения по умолчанию, которые можно поменять по необходимости. Этим немного сокращается количество одинакового кода. Пример:
// Функция возведения в степень
// Второй параметр имеет значение по умолчанию 2
const pow = (x, base = 2) => {
return x ** base;
};
// 3 во второй степени (двойка задана по умолчанию)
pow(3); // 9
// три в третьей степени
pow(3, 3); // 27
https://replit.com/@hexlet/js-basics-define-functions-default-parameters
Значение по умолчанию выглядит как обычное присваивание в определении. Оно срабатывает только в том случае, если аргумент не передан. К этому нужно привыкнуть. Значение по умолчанию может быть даже в том случае, когда параметр один:
const print = (text = 'nothing') => console.log(text);
print(); // "nothing"
print("Hexlet"); // Hexlet
Параметров со значениями по умолчанию может быть сколько угодно:
const f = (a = 5, b = 10, c = 100) => { ... }
У значений по умолчанию есть одна особенность - они должны идти в самом конце списка параметров. Значения, передаваемые функции при вызове, всегда записываются в параметры слева направо, в том порядке, в котором они переданы. Получается, что если значения по умолчанию идут слева в списке параметров, перед обычными параметрами, то при вызове функции с какими-либо аргументами на место значений по умолчанию встанут значения аргументов. Например:
// Вызовем эту функцию со следующими аргументами: f(1, 2, 3)
const f = (a = 5, b = 10, c = 100, x) => { ... }
// параметры получат следующие значения: а = 1, b = 2, c = 3, x = undefined
// в x мы ничего не передали, и JS присвоил ему значение undefined
// Именно поэтому параметры со значением по умолчанию должны идти справа от обычных,
// иначе они либо будут перезаписаны, либо обычный параметр может остаться без значения
// Вызываем функцию, f(1, 2)
const f = (a = 5, x, b = 10, c = 100) => { ... }
// a = 1, x = 2, остальные параметры получают значения по умолчанию
// Здесь всё хорошо, никаких неожиданностей
const f = (x, a = 5, b = 10, c = 100) => { ... }
// И здесь
const f = (x, y, a = 5, b = 10, c = 100) => { ... }
Реализуйте функцию getHiddenCard()
, которая принимает на вход номер кредитки (состоящий из 16 цифр) в виде строки и возвращает его скрытую версию. Скрытая версия может использоваться на сайте для отображения. Если исходная карта имела номер 2034399002125581, то скрытая версия выглядит так ****5581. Другими словами, функция заменяет первые 12 символов, на звездочки. Количество звездочек регулируется вторым необязательным параметром. Значение по умолчанию — 4.
// Кредитка передается внутрь как строка
getHiddenCard('1234567812345678', 2); // **5678
getHiddenCard('1234567812345678', 3); // ***5678
getHiddenCard('1234567812345678'); // ****5678
getHiddenCard('2034399002121100', 1); // *1100
Для выполнения задания вам понадобится метод строки repeat()
, который повторяет строку указанное количество раз
'+'.repeat(5); // +++++
'o'.repeat(3); // ooo
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1// @ts-check
2
3import { test, expect } from '@jest/globals';
4import f from './index.js';
5
6test('test', () => {
7 expect(f('1234123412341234')).toEqual('****1234');
8 expect(f('1234123412344321')).toEqual('****4321');
9 expect(f('1234123412344321', 2)).toEqual('**4321');
10 expect(f('1234123412341234', 12)).toEqual('************1234');
11});
12
Решение учителя откроется через: