Open kohutd opened 1 year ago
вибірка РівеньДовіри
НИЗЬКИЙ
СЕРЕДНІЙ
ВИСОКИЙ
кінець
вибірка РівеньДовіри число
НИЗЬКИЙ = 0
СЕРЕДНІЙ = 1
ВИСОКИЙ = 2
кінець
вибірка РівеньДовіри текст
НИЗЬКИЙ = "низ"
СЕРЕДНІЙ = "сер"
ВИСОКИЙ = "вис"
кінець
рд = РівеньДовіри.НИЗЬКИЙ
якщо рд рівно РівеньДовіри.ВИСОКИЙ
друк("рд високий")
кінець
Щось таке, але в слові "вибірка" поки не впевнений.
Думаю, "перелік" підійшло би
@DanikVitek "перелік" звучить дійсно непогано :+1:
Як щодо варіанту написання у вигляді переліку структур?
перелік Колір
Жовтий
Блакитний
ЧЗС як
червоний число
зелений число
синій число
кінець
кінець
Або як перелік варіантів різних типів
перелік СинтаксичнеДерево
Вираз як Вираз
Констатування як Констатування
кінець
перелік Вираз
;; ...
кінець
перелік Констатування
;; ...
кінець
@DanikVitek а які приклади застосування? Незрозуміло, що мається наувазі під як
Прилади застосування:
кольори_прапору = [Колір.Жовтий, Колір.Блакитний]
жовтий_як_чзс = Колір.ЧЗС(червоний=255, зелений=255, синій=0)
сд = СинтаксичнеДерево.Вираз(Вираз(;-- ... --;))
Тобто як
означає початок сигнатури варіанта-структури, або посилання на існуючий тип
Приклад використання переліку для помилок
перелік ПомилкаРозборуЧисла є помилка
РозбірЦілого як ПомилкаРозборуЦілого
РозбірДоробового як ПомилкаРозборуДробового
кінець
структура ПомилкаРозборуЦілого є помилка
введення текст
кінець
структура ПомилкаРозборуДробового є помилка
введення текст
кінець
Хм, цікаво. Проте чи не буде це робити путанину? Наприклад коли хочеться перевірити чи значення рівне кольору Рожевий
з переліку Колір
і логічно це робити так: знач == Колір.Рожевий
, але в дійсності це структура типу:
перелік Колір
Рожевий як
ч число
з число
с число
кінець
кінець
Можливо Рожевий
не найкращий приклад, проте якщо підставити той ж ЧЗС
, то теж не дуже зрозуміло як це порівнювати
Також, ще варіант з параметрами дії враховуючи приклад з ЧЗС
:
дія щось_зробити_з_кольором(к Колір)
;; ...
кінець
Чи можливо передати ЧЗС
в цей параметр, типу щось_зробити_з_кольором(Колір.ЧЗС(10, 20, 30))
, чи має бути помилка
За замовчуванням можна робити порівняння лише за співпадінням варіанта й значень полів, якщо варіант однаковий. У ідеалі - для перевірки значення варіанту варто мати pattern matching. Тоді було би щось аналогічне Rust, OCaml та подібним мовам:
enum Color {
Yellow,
Magenta,
RGB {
red: u8,
green: u8,
blue: u8
},
}
impl PartialEq for Color {
fn partial_eq(&self, other: &Self) -> bool {
match (self, other) {
(Color::Yellow, Color::Yellow)
| (Color::Magenta, Color::Magenta)
| (Color::Yellow, Color::RGB { red: 255, green: 255, blue: 0 })
| (Color::RGB { red: 255, green: 255, blue: 0 }, Color::Yellow)
| (Color::Magenta, Color::RGB { red: 255, green: 0, blue: 255 })
| (Color::RGB { red: 255, green: 0, blue: 255 }, Color::Magenta) => true,
(Color::RGB {red: r1, green: g1, blue: b1},
Color::RGB {red: r2, green: g2, blue: b2}) => r1 == r2 && g1 == g2 && b1 == b2,
}
}
}
Також, ще варіант з параметрами дії враховуючи приклад з
ЧЗС
:дія щось_зробити_з_кольором(к Колір) ;; ... кінець
Чи можливо передати
ЧЗС
в цей параметр, типущось_зробити_з_кольором(Колір.ЧЗС(10, 20, 30))
, чи має бути помилка
Так, має бути можливим передати Колір.ЧЗС
у дію що приймає Колір
, бо це один з його варіантів
Думаю, варто додавати переліки такого виду лише разом із pattern matching, бо інакше буде дуже не зручно ними користуватися
Також, ще варіант з параметрами дії враховуючи приклад з
ЧЗС
:дія щось_зробити_з_кольором(к Колір) ;; ... кінець
Чи можливо передати
ЧЗС
в цей параметр, типущось_зробити_з_кольором(Колір.ЧЗС(10, 20, 30))
, чи має бути помилкаТак, має бути можливим передати
Колір.ЧЗС
у дію що приймаєКолір
, бо це один з його варіантів
Виходить, що перелік Колір
технічно буде структурою Колір
, а Колір.ЧЗС
буде структурою яка наслідуватиме структуру Колір
Виходить, що перелік
Колір
технічно буде структуроюКолір
, аКолір.ЧЗС
буде стуктурою яка наслідуватиме структуруКолір
Щось накшталт цього, так. Як один з варіантів реалізації, у випадку з JS
Думаю, варто додавати переліки такого виду лише разом із pattern matching, бо інакше буде дуже не зручно ними користуватися
Тут +. Хоча прості переліки можна і вже робити
Також варто писати слово структура
після як
, якщо вказується нова структура з властивостями:
перелік Колір
Рожевий як структура
ч число
з число
с число
кінець
кінець
Якщо використовується наявна структура, то як і було:
перелік Колір
Рожевий як РожевийКолір
кінець
Проблема
В мову згодом треба буде додати enum-и. Потрібно придумати для них синтаксис.
Пропозиція
Обговорити тут.