Crystal - компільована обʼєктно-орієнтована мова програмування. Ось деякі з цілей цієї мови:
Синтаксис, натхненний Ruby.
Статична перевірка типів, але без потреби вказувати тип змінних чи аргументів методів.
Можливість викликати код на C, написавши для нього привʼязки на Crystal.
Обчислення й генерація коду під час компіляції, що дає змогу уникати шаблонного коду.
Компіляція в ефективний нативний код.
Робота над Crystal почалася 2011 року з метою створити мову з елегантністю та продуктивністю Ruby, але зі швидкодією та типобезпекою компільованої мови. Спочатку компілятор мови був написаний на Ruby, але 2013 року його переписали на Crystal. Мову розробили та спроєктували Арі Боренцвейг, Хуан Вайнерман і Браян Кардіфф.
Щоб оголосити змінну, використаймо оператор присвоєння =.
У Crystal змінні записують у форматі snake_case.
number = 1
puts number # => 1
number = 2
puts number # => 2
Константи оголошують тим самим оператором присвоєння =, але записують їхні назви великими літерами. Такий стиль називають SCREAMING_SNAKE_CASE.
NUMBER = 1
puts NUMBER # => 1
Якщо присвоїти значення вже визначеній константі, виникне помилка під час компіляції.
NUMBER = 1
NUMBER = 2
# Error: already initialized constant NUMBER
Crystal - компільована мова, тобто кожній змінній чи аргументу методу тип призначають під час компіляції. Компілятор уміє виводити тип змінної чи аргументу методу. Однак у деяких випадках тип доводиться вказувати явно. Випадки, у яких потрібно вказати тип, розглянемо в наступних концепціях.
Методи дають змогу згрупувати набір інструкцій, які можна використовувати повторно.
У Crystal методи часто визначають усередині класу, модуля чи структури.
Однак метод можна визначити й поза класом, модулем чи структурою.
Методи оголошують ключовим словом def, після якого йде назва методу.
У Crystal назви методів пишуть у стилі snake_case.
Дужки можна опустити, якщо метод не має аргументів.
Щоб позначити кінець методу, потрібно використати ключове слово end.
def hello
puts "Hello World!"
end
Якщо викликати метод, якого не існує для типу змінної чи аргументу методу, виникне помилка під час компіляції.
number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String
Методи можуть приймати аргументи. Аргументи - це дані, які передають методу. Щоб передати методу аргументи, потрібно вказати назву аргументу. У Crystal назви аргументів пишуть у стилі snake_case. Метод може мати кілька аргументів, але їх потрібно розділяти комою.
def hello(name)
puts "Hello #{name}!"
end
Методи можуть мати й кілька аргументів. У цьому разі аргументи потрібно розділяти комою.
def hello(name, language)
puts "Hello #{name}! You are learning #{language}."
end
Коли ми викликаємо метод, що належить класу, модулю чи структурі, потрібно використати оператор крапки (.).
Формат такий: <ClassName>.<method_name>.
Якщо метод не належить класу, модулю чи структурі, його достатньо викликати, просто написавши його назву.
Методи завжди неявно повертають значення останнього виразу.
Якщо метод має аргументи, під час виклику й оголошення можна використовувати дужки, як тут: <method_name>(<argument_1>, <argument_2>, ...).
Якщо метод не має аргументів, дужки опускають.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Коли ми викликаємо метод із кількома аргументами, їх потрібно розділяти комою. Аргументи потрібно передавати в тому самому порядку, у якому їх оголошено в методі.
def hello_language(name, language)
"Hello #{name}! You are learning #{language}."
end
hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.
Якщо викликати метод із неправильною кількістю аргументів, виникне помилка під час компіляції.
hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)
У Crystal можна додати два числа оператором +.
Відняти два числа можна оператором -.
А оператором * можна помножити два числа.
1 + 1
# => 2
2 - 1
# => 1
2 * 2
# => 4
У Crystal коментарі пишуть символом #, після якого ставлять пробіл, а далі - сам коментар.
Коментарі використовують, щоб документувати код.
Компілятор не виконує коментарі.
# This is a comment