OxL Справочник OxL
РусскийEnglish

Типы и значения

Основные типы — data (запись), enum (сумма с вариантами, у которых могут быть поля) и объединения A | B. Методы пишутся в impl, static fn вызывается как Point.origin(). Внутри метода поля доступны по имени.

oxl✓ проверяется в CI
data Point { x: f64; y: f64 }

impl Point {
  static fn origin() -> Point => Point{ x: 0.0, y: 0.0 }
  fn dist2() -> f64 => x * x + y * y
}

enum Shape {
  Circle(r: f64)
  Rect(w: f64, h: f64)
  Empty
}

// match должен быть исчерпывающим
fn area(s: Shape) -> f64  pure =>
  match s {
    Circle(r) => 3.0 * r * r
    Rect(w, h) => w * h
    Empty => 0.0
  }

fn main() io {
  let p = Point{ x: 3.0, y: 4.0 }
  print("{p.dist2()}")
  var names: List<str> = ["ann", "bob"]     // var — изменяемая переменная, let — нет
  names.push("eve")
  print("{names.len()} {names}")
  let ages: Map<str, i32> = {"ann": 31, "bob": 25}
  print("{ages.get("bob") ?? 0} {ages.get("zed") ?? -1}")   // get возвращает i32?
  print("{area(Shape.Rect(2.0, 5.0))} {area(Shape.Empty)}")
  let squares = from n in 1..=5 select n * n   // запрос в памяти: ленивый итератор
  print("{squares.toList()}")
}
Вывод
25.0
3 ["ann", "bob", "eve"]
25 -1
10.0 0.0
[1, 4, 9, 16, 25]

Что дальше изучить#

  • Владение и заимствование без явных времён жизни — §7: значение перемещается при передаче, clone копирует, &T заимствует.
  • Уточнённые типы (type Percent = u8 where 0..=90), distinct-типы, @derive(Copy, Eq, Ord, Hash, Show) — §3 и §4.
  • Интерфейсы структурные: подходит любой тип с нужными методами (§4.6); встраивание embed и перегрузка операторов — V.3.
  • Стандартные коллекции и итераторы — std.core.

См. также

OxL 1.0.0-beta · Версия документации 1.0.0-beta© OxwaldLink · сгенерировано из Стандарта, исходников std и руководства