Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/functional-programming/understand-functional-programming-terminology.md
2023-03-28 21:16:03 +05:30

4.9 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7b8e367417b2b2512b5c Термінологія функційного програмування 1 301240 understand-functional-programming-terminology

--description--

У команди fCC змінився настрій і тепер вони хочуть два типи чаю: зелений та чорний. Загальновідомий факт: перепади настрою клієнта є надзвичайно поширеним явищем.

З цією інформацією нам потрібно знову відвідати функцію getTea, щоб обробити різні чайні запити. Ми можемо змінити getTea, щоб прийняти функцію як аргумент і вона могла заварювати інші види чаю. Це робить getTea гнучкішою і надає програмісту більше контролю, якщо клієнт просить щось змінити.

Але спочатку розглянемо трішки функційної термінології:

Функції зворотного виклику (callback) — це функції, які передаються іншим функціям, щоб вирішити, коли та як їх викликати. Можливо, ви бачили, як деякі передаються іншим методам. Наприклад, у filter функція зворотного виклику повідомляє JavaScript критерії для фільтрації масиву.

Функції, які можна присвоїти до змінної, передати до іншої функції або навпаки повернути з іншої функції, як інше звичайне значення, називають функціями першого класу. У JavaScript всі функції є функціями першого класу.

Функції, які приймають функцію як аргумент або повертають функцію як повернуте значення, називають функціями вищого порядку.

Якщо функції передаються або повертаються з іншої функції, тоді ті функції, які були передані або повернені, можуть називатися лямбдою.

--instructions--

Приготуйте 27 чашок зеленого і 13 чашок чорного чаю та збережіть їх у змінних tea4GreenTeamFCC та tea4BlackTeamFCC. Зверніть увагу, що функція getTea була змінена, тому тепер вона приймає функцію як перший аргумент.

Примітка: дані (кількість чашок чаю) надаються як останній аргумент. Ми обговоримо це в наступних завданнях.

--hints--

Змінна tea4GreenTeamFCC повинна містити 27 чашок зеленого чаю для команди.

assert(tea4GreenTeamFCC.length === 27);

Змінна tea4GreenTeamFCC повинна містити чашки зеленого чаю.

assert(tea4GreenTeamFCC[0] === 'greenTea');

Змінна tea4BlackTeamFCC повинна містити 13 чашок чорного чаю.

assert(tea4BlackTeamFCC.length === 13);

Змінна tea4BlackTeamFCC повинна містити чашки чорного чаю.

assert(tea4BlackTeamFCC[0] === 'blackTea');

--seed--

--seed-contents--

// Function that returns a string representing a cup of green tea
const prepareGreenTea = () => 'greenTea';

// Function that returns a string representing a cup of black tea
const prepareBlackTea = () => 'blackTea';

/*
Given a function (representing the tea type) and number of cups needed, the
following function returns an array of strings (each representing a cup of
a specific type of tea).
*/
const getTea = (prepareTea, numOfCups) => {
  const teaCups = [];

  for(let cups = 1; cups <= numOfCups; cups += 1) {
    const teaCup = prepareTea();
    teaCups.push(teaCup);
  }
  return teaCups;
};

// Only change code below this line
const tea4GreenTeamFCC = null;
const tea4BlackTeamFCC = null;
// Only change code above this line

console.log(
  tea4GreenTeamFCC,
  tea4BlackTeamFCC
);

--solutions--

const prepareGreenTea = () => 'greenTea';
const prepareBlackTea = () => 'blackTea';

const getTea = (prepareTea, numOfCups) => {
  const teaCups = [];

  for(let cups = 1; cups <= numOfCups; cups += 1) {
    const teaCup = prepareTea();
    teaCups.push(teaCup);
  }
  return teaCups;
};

const tea4BlackTeamFCC = getTea(prepareBlackTea, 13);
const tea4GreenTeamFCC = getTea(prepareGreenTea, 27);