Треки
/
Gleam
Gleam
/
Вправи
/
Треки на треках на треках
Треки на треках на треках

Треки на треках на треках

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

Вступ

Масиви

Масив у Gleam - це незмінна колекція з нуля або більше значень. Усі значення в масиві мусять мати той самий тип. Оскільки масиви незмінні, то щойно масив створено, його значення вже не може змінитися. Будь-які функції чи оператори, які нібито змінюють масив (наприклад, додають елемент), насправді повертають новий масив.

Масиви можна визначити так:

let empty = []
let singleValue = [5]
let threeValues = ["a", "b", "c"]

Найпоширеніший спосіб додати елемент до масиву - скористатися синтаксисом розгортання:

let two_to_four = [2, 3, 4]
let one_to_four = [1, ..two_to_four]
// -> [1, 2, 3, 4]

Модуль gleam/list зі стандартної бібліотеки Gleam містить багато корисних функцій для роботи з масивами. Цей модуль дуже часто використовують у коді Gleam, тож варто з ним ознайомитися.

Шаблони масивів можна використовувати у виразах case, щоб зіставляти масиви та присвоювати змінним значення, які в них містяться:

pub fn describe(list: List(String)) -> String {
  case list {
    [] -> "Empty list"
    [x] -> "List with one item: " <> x
    [x, y] -> "List with two items: " <> x <> " and " <> y
    _ -> "List with three or more items"
  }
}

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

pub fn describe(list: List(String)) -> String {
  case list {
    [_, _, ..] -> "List with at least two items"
    [_] -> "List with one item"
    [] -> "Empty list"
  }
}

Синтаксис розгортання також дає змогу присвоїти решту масиву змінній:

pub fn remove_first_item(list: List(String)) -> List(String) {
  case list {
    // Return the list without the first item
    [_, ..rest] -> rest

    // There's no first item to remove, return an empty list
    _ -> []
  }
}

Вирази case повинні мати шаблон для кожного можливого значення типу, з яким зіставляють, тож останній шаблон ігнорування (_) часто використовують, щоб обробити всі решта значень.

Вказівки

У цій вправі ми будемо писати код, щоб відстежувати масив мов програмування, які хочемо вивчати на Exercism.

На нас чекає шість завдань, і всі вони повʼязані з роботою з масивами.

1. Створити новий масив

Щоб відстежувати мови, які ми хочемо вивчати, нам потрібно створити новий масив. Визначмо функцію new_list, яка повертає новий порожній масив.

new_list()
// -> []

2. Визначити наявний масив

Зараз у нас є аркуш паперу з переліком мов, які ми хочемо вивчати: Gleam, Go і TypeScript. Визначмо функцію existing_list, яка повертає цей масив.

existing_list()
// -> ["Gleam", "Go", "TypeScript"]

3. Додати нову мову до масиву

Досліджуючи Exercism і знаходячи цікавіші мови, ми хочемо додавати їх до свого масиву. Реалізуймо функцію add_language, щоб додавати нову мову на початок масиву.

add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]

4. Порахувати мови в масиві

Рахувати мови по одній незручно. Реалізуймо функцію count_languages, щоб порахувати кількість мов у масиві.

count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4

5. Перевернути масив

У якийсь момент ми усвідомлюємо, що наш масив насправді впорядковано у зворотному порядку! Реалізуймо функцію reverse_list, щоб перевернути масив.

reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]

6. Перевірити, чи масив захопливий

Хоча ми любимо всі мови, Gleam посідає особливе місце в нашому серці. Тому масив мов викликає в нас справжнє захоплення, якщо:

  • Першою в масиві стоїть мова Gleam.
  • Другою в масиві стоїть мова Gleam, і масив містить або дві, або три мови.

Реалізуймо функцію exciting_list, щоб перевірити, чи масив мов захопливий:

exciting_list(["Lua", "Gleam"])
// -> True
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Gleam Exercism

Час розпочати Треки на треках на треках?

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