Общая характеристика синтаксиса
Синтаксис языка Sol вдохновлён языком Swift, благодаря чему отличается лаконичностью, читаемостью и современным стилем.
Исполняемый код
Весь исполняемый код размещается либо внутри тела функций, либо в виде выражений, результат которых присваивается переменной или полю структуры/объекта. Внефункциональный исполняемый код не допускается, что упрощает контроль над порядком выполнения и улучшает модульность.
Функции
Объявление функции без возвращаемого значения
func имя() {
// код
}Объявление функции с возвращаемым значением
func имя() -> Тип {
// код
return Тип()
}Объявление функции с аргументами
func имя(аргумент: Тип, второй_аргумент: Тип) {
// код
}Объявление переменных
В языке Sol переменные объявляются только с использованием ключевых слов let и const.
Синтаксис
let идентификатор: Тип = выражение
const идентификатор: Тип = выражениеСемантика
| Модификатор | Изменяемость | Присваивание после объявления | Поведение |
|---|---|---|---|
let | изменяемый | допускается | Значение переменной может быть изменено, но имя остаётся привязанным к одному объекту. |
const | неизменяемый | обязательно при объявлении | Присвоенное значение не может быть изменено или переназначено. |
Переменные являются лексически блочно-замкнутыми и подчиняются правилу ограниченной области видимости (lexical scoping).
Вывод типов
Если тип может быть однозначно определён из выражения, его указание допускается опустить:
let здоровье = 100 // Int
const имя = "Игрок" // StringУправляющие конструкции
Условные конструкции
if здоровье <= 0 {
print("Игра окончена")
} else if здоровье < 50 {
print("Низкий уровень здоровья")
} else {
print("Всё в порядке")
}Циклы
for i in 0..<10 {
print(i)
}
while энергия > 0 {
тратить_энергию()
}Структуры и классы
Структура
struct Вектор2 {
x: Float
y: Float
}Класс
class Игрок {
let имя: String
let здоровье: Int
init(имя: String, здоровье: Int) {
self.имя = имя
self.здоровье = здоровье
}
func атаковать(другой: Игрок) {
другой.здоровье -= 10
}
}