Треки
/
Gleam
Gleam
/
Вправи
/
Велосипедна крамниця Бетті
Велосипедна крамниця Бетті

Велосипедна крамниця Бетті

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

Вступ

Цілі числа

У Gleam є два різні види чисел: цілі числа та числа з плаваючою комою.

Цілі числа не мають дробової частини.

let integer = 3
// -> 3

У Gleam є кілька операторів для роботи з цілими числами.

1 + 1 // -> 2
5 - 1 // -> 4
5 / 2 // -> 2
3 * 3 // -> 9
5 % 2 // -> 1

2 > 1  // -> True
2 < 1  // -> False
2 >= 1 // -> True
2 <= 1 // -> False

Числа з плаваючою комою

Числа з плаваючою комою мають одну або більше цифр після десяткового розділювача.

let float = 3.45
// -> 3.45

Для чисел з плаваючою комою теж є власний набір операторів.

1.0 +. 1.4 // -> 2.4
5.0 -. 1.5 // -> 3.5
5.0 /. 2.0 // -> 2.5
3.0 *. 3.1 // -> 9.3

2.0 >. 1.0  // -> True
2.0 <. 1.0  // -> False
2.0 >=. 1.0 // -> True
2.0 <=. 1.0 // -> False

Модулі

Модулі

Код Gleam організовано в модулі, і кожен файл є одним модулем Gleam.

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

// This function is public
pub fn add(x, y) {
  x + y
}

// This function is private
fn subtract(x, y) {
  x - y
}

Модулі Gleam мають назви, і назва походить від шляху до файлу в каталозі src або test.

Наприклад, модуль, визначений у src\geometry\rectangle.gleam (у Windows) або src/geometry/rectangle.gleam (у UNIX-подібних операційних системах), матиме назву geometry/rectangle.

Імпорт функцій з інших модулів

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

Кваліфікований імпорт є типовим, і доступ до функції в такому модулі (наприклад, до функції map у модулі gleam/list) відбувається через додавання назви модуля як префікса (list.map).

// Import the int module
import gleam/int

pub fn run(x: Int) -> String {
  // Use the to_string function from the int module
  int.to_string(x)
}

Типово для звернення до модуля використовується остання частина його назви, у цьому випадку int, але це можна змінити за допомогою ключового слова as.

// Import the int module and refer to it as i
import gleam/int as i

pub fn run(x: Int) -> String {
  i.to_string(x)
}

Некваліфікований імпорт дає прямий доступ до наданих функцій цього модуля без префікса.

// Import the to_string function from the int module
import gleam/int.{to_string}

pub fn run(x: Int) -> String {
  to_string(x)
}

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

Стандартна бібліотека

Gleam має багату й добре задокументовану стандартну бібліотеку. Документація доступна онлайн на hexdocs.pm/gleam_stdlib. Збережіть це посилання десь, воно нам дуже знадобиться!

Більшість вбудованих типів даних має відповідний модуль із функціями для роботи з цим типом даних, наприклад, є модуль gleam/int для цілих чисел, модуль gleam/string для рядків тексту (англ. string), модуль gleam/list для масивів тощо.

Вказівки

У цій вправі ми напишемо трохи коду, щоб допомогти Betty's Bike Shop, онлайн-магазину велосипедів і запчастин. На нас чекають три завдання, мета яких - правильно показати ціни на велосипеди й запчастини на сайті.

1. Експортуйте функцію pence_to_pounds

Наш колега вже написав скелет модуля, а також неповні функції pence_to_pounds і pounds_to_string. Однак він забув експортувати функцію pence_to_pounds, тож зараз її не бачать інші модулі або набір тестів.

Експортуйте функцію pence_to_pounds.

2. Перетворіть пенси на фунти

Зараз ціна зберігається як ціле число пенсів (магазин розташований у Великій Британії). На сайті ми хочемо показувати ціну у фунтах, де 1.00 фунта дорівнює 100 пенсам. Перше завдання - реалізувати функцію pence_to_pounds, яка приймає Int з кількістю пенсів і перетворює його на еквівалентну кількість фунтів як Float. Також додайте анотації типів для цієї функції.

pence_to_pounds(106)
// -> 1.06

3. Відформатуйте ціну для показу на сайті

Оскільки велосипеди Betty's Bike Shop продаються за фунти, ціни слід показувати із символом «£». Отже, друге завдання - реалізувати функцію pounds_to_string, яка приймає суму у фунтах як Float і повертає ціну, показану як String із символом фунта попереду.

Перш ніж використовувати модулі gleam/float і gleam/string, їх треба імпортувати.

Також визначте анотацію типу для pounds_to_string.

pounds_to_string(1.06)
// -> "£1.06"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Gleam Exercism

Час розпочати Велосипедна крамниця Бетті?

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