From 15c352a2df269919ec23ba3f1e6c5600fd10cc4f Mon Sep 17 00:00:00 2001 From: Vlad Possin Date: Mon, 16 Nov 2020 22:32:39 +0600 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D0=B5?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/homework-1/index.js | 106 ++++++++++++++++++++++++++++ projects/homework-1/index.spec.js | 110 ++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 projects/homework-1/index.js create mode 100644 projects/homework-1/index.spec.js diff --git a/projects/homework-1/index.js b/projects/homework-1/index.js new file mode 100644 index 0000000..6ea6dae --- /dev/null +++ b/projects/homework-1/index.js @@ -0,0 +1,106 @@ +/* ДЗ 1 - Функции */ + +/* + Задание 1: + + 1.1: Добавьте к функции параметр с любым именем + 1.2: Функция должна возвращать аргумент, переданный ей в качестве параметра + + Пример: + returnFirstArgument(10) вернет 10 + returnFirstArgument('привет') вернет `привет` + + Другими словами: функция должна возвращать в неизменном виде то, что поступает ей на вход + */ +function returnFirstArgument(a) { + return a; +} + +/* + Задание 2: + + 2.1: Функция должна возвращать сумму переданных аргументов + + Пример: + sumWithDefaults(10, 20) вернет 30 + sumWithDefaults(2, 4) вернет 6 + + 2.1 *: Значение по умолчанию для второго аргумента должно быть равно 100 + + Пример: + sumWithDefaults(10) вернет 110 + */ +function sumWithDefaults(a, b = 100) { + return a + b; +} + +/* + Задание 3: + + Функция должна принимать другую функцию и возвращать результат вызова этой функции + + Пример: + returnFnResult(() => 'привет') вернет 'привет' + */ +function returnFnResult(fn) { + return fn(); +} + +/* + Задание 4: + + Функция должна принимать число и возвращать новую функцию (F) + При вызове функции F, переданное ранее число должно быть увеличено на единицу и возвращено из F + + Пример: + var f = returnCounter(10); + + console.log(f()); // выведет 11 + console.log(f()); // выведет 12 + console.log(f()); // выведет 13 + */ + +function returnCounter(number = 0) { + return () => ++number; +} + +/* + Задание 5 *: + + Функция должна возвращать все переданные ей аргументы в виде массива + Количество переданных аргументов заранее неизвестно + + Пример: + returnArgumentsArray(1, 2, 3) вернет [1, 2, 3] + */ +function returnArgumentsArray(...a) { + return a; +} + +/* + Задание 6 *: + + Функция должна принимать другую функцию (F) и некоторое количество дополнительных аргументов + Функция должна привязать переданные аргументы к функции F и вернуть получившуюся функцию + + Пример: + function sum(a, b) { + return a + b; + } + + var newSum = bindFunction(sum, 2, 4); + + console.log(newSum()) выведет 6 + */ +function bindFunction(fn, ...a) { + return () => fn(...a); +} + +export { + returnFirstArgument, + sumWithDefaults, + returnArgumentsArray, + returnFnResult, + returnCounter, + bindFunction, +}; diff --git a/projects/homework-1/index.spec.js b/projects/homework-1/index.spec.js new file mode 100644 index 0000000..c105323 --- /dev/null +++ b/projects/homework-1/index.spec.js @@ -0,0 +1,110 @@ +import { randomStringArray, randomValue as random } from '../../scripts/helper'; +import { + bindFunction, + returnArgumentsArray, + returnCounter, + returnFirstArgument, + returnFnResult, + sumWithDefaults, +} from './index'; + +describe('ДЗ 1 - функции', () => { + describe('returnFirstArgument', () => { + it('должна возвращать переданный аргумент', () => { + const value = random(); + const result = returnFirstArgument(value); + + expect(result).toBe(value); + }); + }); + + describe('sumWithDefaults', () => { + it('должна возвращать сумму переданных аргументов', () => { + const valueA = random('number'); + const valueB = random('number'); + const result = sumWithDefaults(valueA, valueB); + + expect(result).toBe(valueA + valueB); + }); + + it('значение по умолчанию второго аргумента должно быть 100', () => { + const value = random('number'); + const result = sumWithDefaults(value); + + expect(result).toBe(value + 100); + }); + }); + + describe('returnFnResult', () => { + it('должна возвращать результат вызова переданной функции', () => { + function fn() { + return value; + } + + const value = random(); + const result = returnFnResult(fn); // result = fn() -> value + + expect(result).toBe(value); + }); + }); + + describe('returnCounter', () => { + it('должна возвращать функцию', () => { + const result = returnCounter(); + + expect(typeof result).toBe('function'); + }); + + it('возвращаемая функция должна увеличивать переданное число на единицу при каждом вызове', () => { + const value = random('number'); + const result = returnCounter(value); + + expect(result()).toBe(value + 1); + expect(result()).toBe(value + 2); + expect(result()).toBe(value + 3); + }); + + it('значение аргумента должно быть 0 по умолчанию', () => { + const result = returnCounter(); + + expect(result()).toBe(1); + expect(result()).toBe(2); + expect(result()).toBe(3); + }); + }); + + describe('returnArgumentsArray', () => { + it('должна возвращать переданные аргументы в виде массива', () => { + const value = random('array', 1); + const result = returnArgumentsArray(...value); + + expect(result).toEqual(value); + }); + + it('должна возвращать пустой массив если нет аргументов', () => { + const result = returnArgumentsArray(); + + expect(result.length).toBe(0); + }); + }); + + describe('bindFunction', () => { + const valuesArr = randomStringArray(); + + function fn(...valuesArr) { + return [...arguments].join(''); + } + + it('должна возвращать функцию', () => { + const result = bindFunction(fn); + + expect(typeof result).toBe('function'); + }); + + it('должна привязывать любое кол-во аргументов возвращаемой функции', () => { + const result = bindFunction(fn, ...valuesArr); + + expect(result()).toBe(valuesArr.join('')); + }); + }); +});