Треки
/
Gleam
Gleam
/
Салабус
/
Непрозорі типи
Не

Непрозорі типи у Gleam

4 вправи

Про концепцію Непрозорі типи

Непрозорі типи в Gleam визначаються як власні типи, де лише модуль, що визначає тип, може створювати або зіставляти зі зразком значення цього типу. Це корисно для створення типів, які мають використовуватися лише певним чином.

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

pub opaque type PositiveInt {
  PositiveInt(inner: Int)
}

Цей тип PositiveInt призначений для використання в ситуаціях, де потрібне ціле число, але воно має бути нулем або більшим. Звичайний Int у Gleam не можна використати, оскільки він також може бути відʼємним.

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

pub fn from_int(i: Int) -> Result(PositiveInt, String) {
  case i {
    _ if i < 0 -> Error("Value must be positive")
    _ -> Ok(PositiveInt(i))
  }
}

pub fn to_int(i: PositiveInt) -> Int {
  i.inner
}

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

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Непрозорі типи

Практика заблокована

Розблокуйте ще 1 вправу, щоб практикувати концепцію Непрозорі типи