Общая характеристика синтаксиса

Синтаксис языка 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
    }
}