06 Js Function Basics

Функции важные основы #

Иногда шутят, что программист это создание, которое принимает на 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());

Мы поработали с функцией и указали дефолтные параметры, если вдруг программа будет запущена без аргументов. Или для того, что бы мы безопасно запускали функцию без аргументов и получали тестовую промывку аппарата.

Домашнее задание #

  1. Напишите программу приготовления бутербродов. Реализуйте как минимум 3 рецепта: с колбасой, с маслом и с вареньем.
  2. Конвертер валют
    Реализовать метод, который принимает название валюты (например, “EUR”,”RUR”,”USD”,”GPB”) и выдает курс к доллару. Естественно, “USD” возвращает 1.0 . Используя метод из предыдущего пункта написать метод, который принимает пару валют (“GPB”,”EUR”) и возвращает курс обмена. Используя метод из предыдущего пункта реализовать метод который получает пару валют и сумму в первой валюте, возвращает сумму во второй валюте.
  3. Окна и двери
    В старых советских хрущёвках города № решили поменять деревянные окна и двери на пластиковые. Выяснилось, что все двери в хрущёвках одинакового размера 2м*90см, а окна разные, но в каждой квартире могут быть только одинаковые окна.
    • Стоимость переделки окон рассчитывается из стоимости стекла - 100€ за квадратный метр и стоимости косяка - погонный метр 100€.
    • Стоимость дверей рассчитывается исходя из стоимости косяка (как и у окна) и стоимости самой двери 120€ за квадратный метр.
    • Напишите программу, которая поможет стройтресту №12 правильно выставлять счета.
comments powered by Disqus