Треки
/
Julia
Julia
/
Вправи
/
Лазанья
Лазанья

Лазанья

Навчальна вправа

Вступ

Увесь трек Julia буде вимагати, щоб ми ставилися до свого рішення як до невеликих бібліотек, тобто нам потрібно визначати функції, типи тощо, які потім перевірятиме набір тестів. Тому найпершим поняттям, яке ми розглянемо, стануть іменовані функції.

Julia - динамічна мова програмування зі строгою типізацією. Стиль програмування переважно функціональний, хоча й гнучкіший, ніж у таких мовах, як Haskell.

Змінні та присвоєння

Не потрібно оголошувати змінну заздалегідь. Просто присвоймо значення відповідній назві:

julia> myvar = 42  # an integer
42

julia> name = "Maria"  # strings are surrounded by double-quotes ""
"Maria"

Константи

Якщо значення має бути доступним у всій програмі, але не повинно змінюватися, його найкраще позначити як константу.

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

Константи також допомагають захиститися від помилок у коді. Спроба випадково змінити значення const призведе до попередження:

julia> const answer = 42
42

julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24

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

Арифметичні оператори

Вони такі самі, як і в багатьох інших мовах:

2 + 3  # 5 (addition)
2 - 3  # -1 (subtraction)
2 * 3  # 6 (multiplication)
8 / 2  # 4.0 (division with floating-point result)
8 % 3  # 2 (remainder)

Функції

У Julia є два поширені способи визначити іменовану функцію:

  1. За допомогою ключового слова function

    function muladd(x, y, z)
        x * y + z
    end
    

    Відступ у 4 пробіли є загальноприйнятим для читабельності, але компілятор його ігнорує. Ключове слово end обовʼязкове.

    Зауважмо, що ми могли б написати return x * y + z. Однак функції Julia завжди повертають останній обчислений вираз, тож ключове слово return необовʼязкове. Багато програмістів воліють усе ж таки писати його, щоб чіткіше показати свої наміри.

  2. За допомогою «форми присвоєння»

    muladd(x, y, z) = x * y + z
    

    Найчастіше її використовують для створення стислих функцій з одним виразом.

    У формі присвоєння ключове слово return ніколи не використовують.

Обидві форми рівнозначні й використовуються абсолютно однаково, тож вибираймо ту, яка читабельніша.

Щоб викликати функцію, треба вказати її назву й передати аргументи для кожного з її параметрів:

# invoking a function
muladd(10, 5, 1)

# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)

Правила найменування

Як і багато мов, Julia вимагає, щоб назви (змінних, функцій і багатьох інших речей) починалися з літери, за якою йде будь-яка комбінація літер, цифр і символів підкреслення.

За домовленістю назви змінних, констант і функцій пишуть малими літерами, а символи підкреслення зводять до розумного мінімуму.

Вказівки

У цій вправі ми напишемо трохи коду, щоб приготувати чудову лазанью з улюбленої кулінарної книги.

На нас чекають чотири завдання, усі повʼязані з часом, витраченим на приготування лазаньї.

1. Збережіть очікуваний час запікання в константі

Визначте константу expected_bake_time, яка повертає кількість хвилин, протягом яких лазанья має запікатися в печі.

Згідно з кулінарною книгою, лазанья має провести в печі загалом 60 хвилин.

julia> expected_bake_time
60

2. Обчисліть час підготовки в хвилинах

Визначте функцію preparation_time, яка приймає як аргумент кількість шарів, доданих до лазаньї, і повертає кількість хвилин, витрачених на підготовку лазаньї, якщо на кожен шар іде 2 хвилини.

julia> preparation_time(4)
8

3. Обчисліть час, що залишився в печі, у хвилинах

Визначте функцію remaining_time, яка приймає як параметр фактичну кількість хвилин, які лазанья вже провела в печі, і повертає кількість хвилин, які лазаньї ще потрібно залишатися в печі.

julia> remaining_time(50)
10

4. Обчисліть загальний робочий час у хвилинах

Визначте функцію total_working_time, яка приймає два аргументи: перший аргумент - кількість шарів, доданих до лазаньї, а другий - кількість хвилин, які лазанья провела в печі.

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

julia> total_working_time(3, 20)
26
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Julia Exercism

Час розпочати Лазанья?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Julia, а також 35 концепцій128 вправ та справжнє наставництво від людей, і все це безкоштовно.