Функции важные основы #
Иногда шутят, что программист это создание, которое принимает на input чашки кофе и выводит на output страницы кода.
Давайте напишем программу для кофемашины, что бы готовить программистское топливо. Программа для чая
function makeTea() {
console.log("Делаю чай");
}
makeTea();
Программа для для горячей воды
function makeHotWatter() {
console.log("Кипяточек на подходе");
}
makeHotWatter();
Для эспрессо
function makeEspresso() {
console.log("Ваш эспрессо, Сэр!");
}
makeEspresso();
Для американо
function makeAmericano() {
console.log("Ваш напиток, американец");
}
makeAmericano();
Думаю суть понятна. Сколько напитков, столько и разных способов их готовки. Сколько способов, столько и методов их реализации. Сколько методов, столько и нужно написать функций. А что бы запустить функции в автомате, который готовит кофе клиент, выбирает номер, а сам номер мы передадим в switch и получим что-то вроде этого:
function coffeeVendingMachine(number) {
switch (number) {
case 1:
makeTea();
break;
case 2:
makeHotWatter();
break;
case 3:
makeEspresso();
break;
case 4:
makeAmericano();
break;
case 5:
makeCacao();
break;
default:
valueNotFound();
}
}
coffeeVendingMachine(3);
Это реально рабочий кейс. Теоретически так можно сделать. И мало того, так некоторые и делают. И ничего плохого в этом нет. Но язык программирования это такой же язык как и человеческий. И в любом языке одни и те же вещи можно сказать абсолютно разными способами.
Функции приготовления кофе можно и переписать. Как и главную main функцию coffeeVendingMachine(). Давайте попробуем это сделать. Напишем функцию приготовления горячих напитков.
function makeHotDrink(water, coffee, milk, sugar) {
return (`Подогреваем ${water}милилитров воды,
добавляем ${coffee}милиграмм свежемолотого кофе,
для этого напитка использовано ${milk} милилитров молока,
и ${sugar}милиграмм сахара.
`);
}
Наша функция выглядит достаточно странно. Давайте запустим и посмотрим. Перед запуском надо только определиться что именно за напиток мы хотим. На выбор в кофеавтомате есть несколько, со своими рецептами:
- water - 100ml (для чая или просто)
- latte: milk -40, coffee-30, water-70
- cappuccino - milk(30), coffee(20), water(100)
- espresso - milk(0), coffee(20), water(50)
- americano - milk(0), coffee(20), water(100)
- lungo - milk(20), coffee(20), water(100)
То есть, самое позднее на этом месте, мы должны понимать, что нам ничего выдумывать не надо. Все рецепты ЖЁСТКО задано. И нам действительно нужны либо функции, либо переменные для работы с ними. С функциями мы пробовали. Давайте попробуем с переменными.
let hotWater = makeHotDrink(100, 0, 0, 0);
console.log(water)
Мы передали аргументом 100 миллиграмм воды, а остальные аргументы обнулили. И получили в итоге воду.
Точно такие же переменные мы делаем для каждого напитка. А потом можем эти напитки выдавать в кейсах при свитче. Это удобнее тем, что мы в одном методе работаем с подогревом воды и из одного места для всех напитков у нас работает дозатор молока. Теоретически мы можем написать для каждого ингредиента отдельную функцию и в некоторых случаях это даже поощряется.
function makeHotDrink(water, coffee, milk, sugar) {
return makeHotWater() + giveMeCoffee();
+giveMeMakeMilk + giveMeSugar();
}
Но на сегодня, у нас есть и так с чем работать.
Это например звонок от клиента, который попросил сделать тестовый дринк для техника. Что бы не тратились ингридиенты, а только горячая вода и машина промывалась изнутри. Для промывки достаточно 50 миллиграмм. И даже здесь у нас есть минимум два решения.
Первый сделать переменную.
let testDrink = makeHotDrink(50, 0, 0, 0);
console.log(testDrink)
Второй вариант немного изменить саму функцию.
function makeHotDrink(water = 50, coffee = 0, milk = 0, sugar = 0) {
return (`Подогреваем ${water}милилитров воды,
добавляем ${coffee}милиграмм свежемолотого кофе,
для этого напитка использовано ${milk} милилитров молока,
и ${sugar}милиграмм сахара.
`);
}
console.log(makeHotDrink());
Мы поработали с функцией и указали дефолтные параметры, если вдруг программа будет запущена без аргументов. Или для того, что бы мы безопасно запускали функцию без аргументов и получали тестовую промывку аппарата.
Домашнее задание #
- Напишите программу приготовления бутербродов. Реализуйте как минимум 3 рецепта: с колбасой, с маслом и с вареньем.
- Конвертер валют
Реализовать метод, который принимает название валюты (например, “EUR”,”RUR”,”USD”,”GPB”) и выдает курс к доллару. Естественно, “USD” возвращает 1.0 . Используя метод из предыдущего пункта написать метод, который принимает пару валют (“GPB”,”EUR”) и возвращает курс обмена. Используя метод из предыдущего пункта реализовать метод который получает пару валют и сумму в первой валюте, возвращает сумму во второй валюте. - Окна и двери
В старых советских хрущёвках города № решили поменять деревянные окна и двери на пластиковые. Выяснилось, что все двери в хрущёвках одинакового размера 2м*90см, а окна разные, но в каждой квартире могут быть только одинаковые окна.- Стоимость переделки окон рассчитывается из стоимости стекла - 100€ за квадратный метр и стоимости косяка - погонный метр 100€.
- Стоимость дверей рассчитывается исходя из стоимости косяка (как и у окна) и стоимости самой двери 120€ за квадратный метр.
- Напишите программу, которая поможет стройтресту №12 правильно выставлять счета.