4365a50cda
с афроо лошадьми
260 lines
7.8 KiB
Markdown
260 lines
7.8 KiB
Markdown
# 📚 Документация FoxLang v5.0
|
|
|
|
## Оглавление
|
|
1. [Основы синтаксиса](#1-основы-синтаксиса)
|
|
2. [Переменные и Типы](#2-переменные-и-типы)
|
|
3. [Пользовательские функции](#3-пользовательские-функции)
|
|
4. [Математика и Логика](#4-математика-и-логика)
|
|
5. [Управляющие конструкции](#5-управляющие-конструкции)
|
|
6. [Массивы](#6-массивы)
|
|
7. [Модули и Импорт](#7-модули-и-импорт)
|
|
8. [Встроенные функции](#8-встроенные-функции)
|
|
9. [Современный синтаксис](#9-современный-синтаксис)
|
|
|
|
---
|
|
|
|
## 1. Основы синтаксиса
|
|
FoxLang использует синтаксис, похожий на C++ и Java.
|
|
* Каждая команда **обязана** заканчиваться точкой с запятой `;`.
|
|
* Блоки кода выделяются фигурными скобками `{ ... }`.
|
|
* Комментарии начинаются с `//` и идут до конца строки.
|
|
* Поддерживаются идентификаторы с подчеркиваниями (`user_name`, `get_data`).
|
|
|
|
```cpp
|
|
// Это комментарий
|
|
print("Hello"); // Команда
|
|
string user_name = "john_doe"; // Современный синтаксис
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Переменные и Типы
|
|
|
|
Язык поддерживает пять основных типов данных:
|
|
|
|
* `int` — Целые числа.
|
|
* `float` — Дробные числа с плавающей точкой.
|
|
* `string` — Текст в двойных кавычках.
|
|
* `bool` — Логический тип (`true` или `false`).
|
|
* `void` — Тип для функций без возвращаемого значения.
|
|
|
|
**Объявление:**
|
|
|
|
```cpp
|
|
int health = 100;
|
|
float gravity = 9.8;
|
|
string player_name = "Player1";
|
|
bool is_alive = true;
|
|
```
|
|
|
|
**Присваивание:**
|
|
|
|
```cpp
|
|
health = 90;
|
|
gravity = 1.62;
|
|
player_name = "Player2";
|
|
is_alive = false;
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Пользовательские функции
|
|
|
|
FoxLang поддерживает полноценные пользовательские функции с параметрами и возвратом значений.
|
|
|
|
### Объявление функций
|
|
|
|
```cpp
|
|
// Функция с возвращаемым значением
|
|
int add(int a, int b) {
|
|
return a + b;
|
|
}
|
|
|
|
// Функция без возвращаемого значения
|
|
void greet(string name) {
|
|
print("Hello, " + name + "!");
|
|
}
|
|
|
|
// Функция без параметров
|
|
string get_version() {
|
|
return "FoxLang 5.0";
|
|
}
|
|
```
|
|
|
|
### Вызов функций
|
|
|
|
```cpp
|
|
int result = add(5, 3);
|
|
greet("Alice");
|
|
string version = get_version();
|
|
print("Version: " + version);
|
|
```
|
|
|
|
### Рекурсивные функции
|
|
|
|
```cpp
|
|
int factorial(int n) {
|
|
if (n <= 1) {
|
|
return 1;
|
|
}
|
|
return n * factorial(n - 1);
|
|
}
|
|
|
|
int fact5 = factorial(5); // 120
|
|
```
|
|
|
|
### Локальные переменные
|
|
|
|
```cpp
|
|
int calculate_area(int width, int height) {
|
|
int area = width * height; // Локальная переменная
|
|
return area;
|
|
}
|
|
```
|
|
|
|
> **Важно:** Нельзя объявить переменную с именем, которое уже существует в текущей области видимости.
|
|
> При присваивании дробного значения переменной типа `int`, оно будет автоматически преобразовано в целое (отброшена дробная часть).
|
|
|
|
---
|
|
|
|
## 3. Математика и Логика
|
|
|
|
Поддерживаются стандартные арифметические операции с учетом приоритета.
|
|
|
|
### Операторы
|
|
|
|
| Оператор | Описание | Пример |
|
|
| --- | --- | --- |
|
|
| `+` | Сложение / Конкатенация строк | `5 + 5` или `"A" + "B"` |
|
|
| `-` | Вычитание | `10 - 2` |
|
|
| `*` | Умножение | `2 * 2` |
|
|
| `/` | Деление | `10 / 2` |
|
|
| `%` | Остаток от деления | `10 % 3` (вернет 1) |
|
|
| `++` | Инкремент (увеличение на 1) | `i++` (вернет старое значение, затем увеличит переменную) |
|
|
|
|
### Сравнение
|
|
|
|
Операторы сравнения возвращают `1` (истина) или `0` (ложь).
|
|
|
|
* `==` (Равно)
|
|
* `!=` (Не равно)
|
|
* `<` (Меньше)
|
|
* `>` (Больше)
|
|
|
|
---
|
|
|
|
## 4. Управляющие конструкции
|
|
|
|
### Условия (If / Else)
|
|
|
|
```cpp
|
|
int x = 10;
|
|
if (x == 10) {
|
|
print("X is ten");
|
|
} else {
|
|
print("X is not ten");
|
|
}
|
|
```
|
|
|
|
### Циклы (While)
|
|
|
|
Выполняет блок кода, пока условие истинно.
|
|
|
|
```cpp
|
|
int i = 0;
|
|
while (i < 5) {
|
|
print("Loop iteration: " + i);
|
|
i++;
|
|
}
|
|
```
|
|
|
|
### Циклы (For)
|
|
|
|
Классический цикл `for`, состоящий из инициализации, условия и шага.
|
|
|
|
```cpp
|
|
for (int i = 0; i < 5; i++) {
|
|
print("For loop: " + i);
|
|
}
|
|
```
|
|
|
|
### Области видимости (Scope)
|
|
|
|
Блоки кода `{ ... }` создают новую область видимости. Переменные, объявленные внутри блока, недоступны снаружи.
|
|
|
|
```cpp
|
|
int global = 10;
|
|
{
|
|
int local = 5;
|
|
print(global); // 10
|
|
print(local); // 5
|
|
}
|
|
// print(local); // Ошибка! Переменная local не существует здесь.
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Функции
|
|
|
|
Функции могут быть объявлены с типом возвращаемого значения или `void`.
|
|
|
|
**Определение:**
|
|
|
|
```cpp
|
|
void myFunc() {
|
|
print("Hello from function!");
|
|
}
|
|
|
|
int square(int x) {
|
|
return x * x;
|
|
}
|
|
```
|
|
|
|
**Вызов:**
|
|
|
|
```cpp
|
|
myFunc();
|
|
int result = square(5);
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Массивы
|
|
|
|
Массивы в FoxLang имеют фиксированный размер при создании.
|
|
|
|
1. **Создание:** `array имя размер;`
|
|
2. **Запись:** `set(имя, индекс, значение);`
|
|
3. **Чтение:** `get(имя, индекс)`
|
|
4. **Размер:** `size(имя)`
|
|
|
|
```cpp
|
|
array chest 3; // Массив на 3 элемента
|
|
set(chest, 0, 55); // Записать 55 в индекс 0
|
|
print(get(chest, 0)); // Выведет 55
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Модули и Импорт
|
|
|
|
FoxLang поддерживает импорт внешних модулей.
|
|
Используйте `include("путь/к/файлу.fox");`.
|
|
|
|
**Особенности:**
|
|
|
|
* При подключении внешних модулей код, находящийся вне функций, будет выполнен при импорте. Глобальные переменные и функции становятся доступными в текущем файле.
|
|
|
|
---
|
|
|
|
## 8. Встроенные функции
|
|
|
|
| Функция | Описание |
|
|
| --- | --- |
|
|
| `print(expr)` | Выводит текст или результат выражения в консоль. |
|
|
| `input()` | Останавливает программу и ждет ввода строки от пользователя. |
|
|
| `round(expr)` | Округляет дробное число до ближайшего целого. |
|
|
| `random()` | Генерирует случайное число от 0 до 99. |
|
|
| `read_file(filename)` | Читает первую непустую строку из файла (игнорирует комментарии #). |
|
|
| `http_get(url)` | Выполняет HTTP GET запрос и возвращает ответ сервера. |
|
|
| `fox()` | Пасхалка: выводит ASCII-арт лисы. | |