4.9 KiB
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);