doc: add 'basics-and-types' doc

This commit is contained in:
samsonium
2026-10-19 21:23:44 +03:00
parent 5e58ea1796
commit 195b82408b
+199
View File
@@ -0,0 +1,199 @@
# Основы и типы
В первой программе мы уже попросили FZLang вывести текст на экран.
Это хороший старт: программа — не что-то загадочное, а набор инструкций, которые компьютер выполняет одну за другой.
Теперь разберёмся, как эти инструкции устроены, как сохранить данные и как попросить программу принять решение.
Не переживайте, если некоторые слова — например, «тип» или «выражение» — пока звучат непривычно.
Мы будем разбирать их на небольших примерах.
Попробуйте не только читать код, но и менять значения: так гораздо легче увидеть, что именно делает программа.
## Первая программа: инструкция и комментарий
Встроенная функция `printline` выводит переданное ей значение в стандартный вывод:
```fz
printline("Привет, FZLang!");
```
Здесь мы вызываем функцию `printline` и передаём ей текст в круглых скобках.
Кавычки показывают, где текст начинается и заканчивается.
Точка с запятой сообщает, что инструкция завершена.
Попробуйте заменить приветствие на своё — программа выведет именно тот текст, который вы ей передали.
Код не обязан состоять только из команд.
В него можно добавлять пояснения для себя и других читателей — комментарии.
Однострочный комментарий начинается с `//`; всё, что стоит после этих символов до конца строки, программа пропускает:
```fz
// Сначала посчитаем, потом выведем результат.
printline(2 + 2);
```
Комментарий не влияет на выполнение программы. Он помогает объяснить, зачем написан код, особенно когда вы вернётесь к нему позже.
## Переменные: давайте дадим значениям имена
Представьте, что программе нужно несколько раз использовать одно и то же значение.
Можно каждый раз писать его заново, но удобнее сохранить его под именем.
Для этого существуют переменные — именованные места для значений.
При объявлении переменной указывают её тип, имя и, если нужно, начальное значение:
```fz
int count = 10;
str greeting = "Здравствуйте!";
bool ready = true;
```
В этих строках мы создали три переменные: `count` хранит число, `greeting` — текст, а `ready` — ответ «да» или «нет».
Тип помогает языку понять, с каким значением мы работаем. Например, число можно складывать, а текст удобно выводить как сообщение.
Переменную можно сначала объявить, а значение присвоить позже:
```fz
u64 total;
total = 15;
printline(total);
```
Когда переменная уже объявлена, её имя можно использовать, чтобы прочитать значение или присвоить новое.
Например, `count = count + 1;` означает: взять текущее значение `count`, прибавить единицу и сохранить результат обратно.
Если до этого `count` было равно 10, после инструкции оно станет равно 11.
### Числа: целые и разных размеров
Для целых чисел в FZLang есть знаковые и беззнаковые типы.
Знаковые числа могут быть отрицательными, а беззнаковые предназначены для неотрицательных значений.
Например, температуру ниже нуля удобно представить знаковым типом, а количество посетителей — беззнаковым:
```fz
int temperature = -5;
uint visitors = 42;
```
Для более точного выбора есть типы фиксированной ширины: `i8`, `i16`, `i32`, `i64` и их беззнаковые варианты `u8`, `u16`, `u32`, `u64`.
Число после `i` или `u` указывает ширину типа в битах. Типы `int` и `uint` имеют размер машинного слова.
```fz
i16 offset = -120;
u8 level = 7;
```
На первых шагах достаточно запомнить, что `int` подходит для обычных целых чисел, а точный тип можно выбрать, когда это действительно важно.
Числовые типы совместимы между собой по правилам языка, но при объявлении переменной тип всё равно указывается явно.
### Логические значения и текст
У типа `bool` всего два значения: `true` (истина) и `false` (ложь).
Это удобно, когда нужно хранить ответ на вопрос: например, открыта ли дверь или готова ли программа продолжать работу.
```fz
bool is_open = true;
printline(is_open);
```
Для текста используется тип `str` (строка):
```fz
str language = "FZLang";
printline(language);
```
В справочнике типов также упоминается `char`, но в текущей версии языка он не используется.
Классы и объектные значения мы оставим для следующих разделов — пока достаточно освоиться с числами, текстом и логическими значениями.
## Выражения: попросим программу посчитать
Выражение — это часть кода, которую можно вычислить и получить значение.
Самый простой пример — `2 + 2`. Выражения можно сохранять в переменные или передавать функциям:
```fz
int result = 2 + 2 * 2;
printline(result);
```
Здесь программа сначала вычисляет выражение, сохраняет результат в `result`, а затем выводит его.
Как и в обычной математике, умножение выполняется раньше сложения, поэтому результат будет 6.
Если хотите изменить порядок вычислений, используйте скобки: ` (2 + 2) * 2`.
Для чисел доступны сложение `+`, вычитание `-`, умножение `*`, деление `/`, остаток от деления `%` и возведение в степень `^`.
Унарный минус позволяет записывать отрицательные числа, например `-5`.
Сравнения помогают задавать вопросы о значениях. Операторы `==` и `!=` проверяют равенство и неравенство, а `<`, `<=`, `>` и `>=` сравнивают числа.
Результат сравнения — логическое значение `true` или `false`:
```fz
bool enough = result >= 4 && result != 0;
printline(enough);
```
В примере переменная `enough` станет истинной, только если `result` не меньше 4 и одновременно не равен нулю.
Оператор `&&` означает «и», `||` — «или», а `!` меняет логическое значение на противоположное.
Полный перечень операций и их ограничений приведён в справочнике [«Операторы»](../reference/operators.md).
Учтите, что при сравнении объектов `==` и `!=` проверяют, ссылаются ли переменные на один и тот же объект, а не совпадает ли содержимое объектов.
## Блоки и условия: программа выбирает путь
Иногда программе нужно выполнить разные действия в зависимости от ситуации.
Для этого есть условие `if`. Оно проверяет логическое выражение и выполняет подходящую ветвь:
```fz
bool is_ready = true;
if (is_ready)
{
printline("Можно продолжать");
}
else
{
printline("Нужно подождать");
}
```
Если `is_ready` равно `true`, программа выведет первое сообщение; иначе — второе.
Ветвь `else` можно опустить, если для случая «нет» ничего делать не нужно.
Если вариантов больше двух, можно добавить `else if` с ещё одним условием.
Фигурные скобки `{}` объединяют инструкции в блок. Вы уже встречали их в примере с условием; такие блоки используются также в функциях.
Они помогают видеть, какие инструкции относятся к одной части программы.
Условие `if` должно иметь тип `bool` — например, результат сравнения или логическая переменная.
## Функции: соберём полезные действия
Когда одну и ту же последовательность действий хочется использовать в разных местах, её можно оформить как функцию.
Функция получает значения через параметры, выполняет инструкции и при необходимости возвращает результат.
```fz
fn sum(int left, int right) int
{
return left + right;
}
int result = sum(2, 3);
printline(result);
```
Объявление начинается с `fn`, затем идут имя функции, параметры и тип результата.
В этом примере `sum` принимает два значения типа `int`, складывает их и возвращает результат типа `int`.
Ключевое слово `return` передаёт этот результат туда, откуда функцию вызвали.
Поэтому вызов `sum(2, 3)` можно использовать как выражение — например, присвоить его результат переменной.
## Что запомнить
Вы уже познакомились с основными строительными блоками программы: инструкциями, комментариями, переменными, типами, выражениями, условиями и функциями.
Не обязательно запоминать все операторы сразу — к справочнику можно возвращаться по мере необходимости.
- Переменная хранит значение и имеет имя и тип.
- Для первых примеров пригодятся числа (`int`, `uint` и типы фиксированной ширины), логические значения (`bool`) и строки (`str`).
- Выражения позволяют вычислять новые значения, а сравнения помогают принимать решения.
- Условия `if` и блоки `{}` управляют тем, какие инструкции выполнит программа.
- Функции объединяют действия и могут возвращать результат.
- Инструкции обычно заканчиваются точкой с запятой, а `printline` помогает увидеть результат работы программы.
---
Далее: [Система типов](../reference/types_system.md)
Назад: [Начало работы](./01_getting-started.md)