diff --git a/docs/ru/book/02_basics-and-types.md b/docs/ru/book/02_basics-and-types.md new file mode 100644 index 0000000..5a0f579 --- /dev/null +++ b/docs/ru/book/02_basics-and-types.md @@ -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) +