Основы языка V
Это краткое руководство по основным конструкциям языка V для тех, кто только начинает разбираться в языке. Зочем? ¯\(ツ)/¯ .
P.s заголовки кликабельны
Туть или неофициальной Туть#
Можно онлайн поиграться с языком на официальной площадкеСсылка на документацию по основным встроенным модулям языка#
👉 Точка с запятой после команд в V не ставится.
Комментарии#
Комментарии в V бывают двух видов: однострочные и многострочные.
Структура программы#
Пример простой программы на языке V
Объявление fn main()
можно пропустить в однофайловых программах. Это полезно при написании небольших программ, "скриптов".
Переменные, константы и типы данных#
Переменная:
- изменяемая (может менять значение в любой момент):
mut name := value
- неизменяемая (не может менять значение после объявления):
name := value
Константа (определяются вначале программы): const
.
Переменные объявляются и инициализируются с помощью :=
. Это единственный способ объявления переменных в V - переменные всегда имеют начальное значение.
⠀
Разница между :=
и =
:=
- объявление и инициализация
=
- присвоение
Требования к названиям переменных
- Имя не должно содержать заглавных букв, например `AlphaTest`
- Используйте символы подчеркивания в качестве разделителей, например `hello_world`
- Название должно быть как можно более описательным
- Имя не должно содержать `__`
- Имя не должно содержать пробелов
- Если имя длиннее 11 символов, то оно должно использовать `_` в качестве разделителя
Чем неизменяемая переменная отличается от константы?)
"переменная без mut" vs "const"
Главное отличие - области видимости:
const xyz = 1
=> xyz может использоваться во всех функциях одного и того же модуля.
abc := 1
=> abc может быть использован только в вашей текущей функции (локальная переменная)
Также const вычисляется во время компиляции, без mut - объявляется во время присваивания
Как это можно использовать?
Например, константы используются для расчётов таблиц, необходимых для рассчётов хешей, во время компиляции.
А переменные без mut - это в рантайме защита, что переменная больше нигде не переписывается, за счёт чего компилятор может делать оптимизации.
В отличие от времени вычисления, которое в текущей реализации не гарантированно всегда будет comptime для const (те, которые вызывают функции, например, вычисляются в начале вашей программы, а не в comptime)
#
Ввод и выводВывод:
- fn print(s string) ← вывести все на sdtout
- fn println(s string) ← вывести все на sdtout на новой строке
println
это простая, но мощная встроенная функция, которая может печатать что угодно: строки, числа, массивы, карты, структуры.
Ввод
Чтобы подключить библиотеку os: import os
Присваивание и сравнение#
Присваивание обозначается одним знаком равно, а проверка на равенство — двумя.
note
:=
- объявить
=
- присвоить
==
- сравнить
Условный оператор if#
Оператор множественного выбора match#
После первого найденного варианта оператор выполняет нужные действия и прекращает работу.
Цикл с предусловием for#
Самый простой цикл — можно объявить только условие, а остальное сделать внутри цикла:
Функции#
При объявлении функции нужно указать:
- какого типа переменные передаются в функцию как параметры;
- какого типа данные возвращает функция.
Структуры#
В V нет привычных для ООП классов, но есть структуры. Технически можно использовать структуры для объявления класса и через них создавать новые объекты, но нужно следить за синтаксисом.
Структура — это когда мы объединяем несколько разнородных (или одинаковых) типов данных в одно целое и работаем с ним как с единым объектом. Почти как классы и объекты, только без классов и объектов.