Фиксация мамы нолнан с сфере IT с симпатией к атусу стоещему на полигоне
с афроо лошадьми
This commit is contained in:
+115
-31
@@ -1,14 +1,15 @@
|
||||
# 📚 Документация FoxLang v4.0
|
||||
# 📚 Документация FoxLang v5.0
|
||||
|
||||
## Оглавление
|
||||
1. [Основы синтаксиса](#1-основы-синтаксиса)
|
||||
2. [Переменные и Типы](#2-переменные-и-типы)
|
||||
3. [Математика и Логика](#3-математика-и-логика)
|
||||
4. [Управляющие конструкции](#4-управляющие-конструкции)
|
||||
5. [Функции](#5-функции)
|
||||
3. [Пользовательские функции](#3-пользовательские-функции)
|
||||
4. [Математика и Логика](#4-математика-и-логика)
|
||||
5. [Управляющие конструкции](#5-управляющие-конструкции)
|
||||
6. [Массивы](#6-массивы)
|
||||
7. [Модули и Импорт](#7-модули-и-импорт)
|
||||
8. [Встроенные функции](#8-встроенные-функции)
|
||||
9. [Современный синтаксис](#9-современный-синтаксис)
|
||||
|
||||
---
|
||||
|
||||
@@ -17,42 +18,108 @@ FoxLang использует синтаксис, похожий на C++ и Java
|
||||
* Каждая команда **обязана** заканчиваться точкой с запятой `;`.
|
||||
* Блоки кода выделяются фигурными скобками `{ ... }`.
|
||||
* Комментарии начинаются с `//` и идут до конца строки.
|
||||
* Поддерживаются идентификаторы с подчеркиваниями (`user_name`, `get_data`).
|
||||
|
||||
```cpp
|
||||
// Это комментарий
|
||||
print("Hello"); // Команда
|
||||
string user_name = "john_doe"; // Современный синтаксис
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Переменные и Типы
|
||||
|
||||
Язык поддерживает два основных типа данных:
|
||||
Язык поддерживает пять основных типов данных:
|
||||
|
||||
* `int` — Целые числа (внутри хранятся как double).
|
||||
* `int` — Целые числа.
|
||||
* `float` — Дробные числа с плавающей точкой.
|
||||
* `string` — Текст в двойных кавычках.
|
||||
* `bool` — Логический тип (`true` или `false`).
|
||||
* `void` — Тип для функций без возвращаемого значения.
|
||||
|
||||
**Объявление:**
|
||||
|
||||
```cpp
|
||||
int health = 100;
|
||||
string name = "Player1";
|
||||
float gravity = 9.8;
|
||||
string player_name = "Player1";
|
||||
bool is_alive = true;
|
||||
```
|
||||
|
||||
**Присваивание:**
|
||||
|
||||
```cpp
|
||||
health = 90;
|
||||
name = "Player2";
|
||||
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. Математика и Логика
|
||||
|
||||
Поддерживаются стандартные арифметические операции с учетом приоритета (умножение/деление выполняются раньше сложения/вычитания).
|
||||
Поддерживаются стандартные арифметические операции с учетом приоритета.
|
||||
|
||||
### Операторы
|
||||
|
||||
@@ -63,10 +130,11 @@ name = "Player2";
|
||||
| `*` | Умножение | `2 * 2` |
|
||||
| `/` | Деление | `10 / 2` |
|
||||
| `%` | Остаток от деления | `10 % 3` (вернет 1) |
|
||||
| `++` | Инкремент (увеличение на 1) | `i++` (вернет старое значение, затем увеличит переменную) |
|
||||
|
||||
### Сравнение
|
||||
|
||||
Операторы сравнения возвращают `1` (истина) или `0` (ложь). Работают и с числами, и со строками.
|
||||
Операторы сравнения возвращают `1` (истина) или `0` (ложь).
|
||||
|
||||
* `==` (Равно)
|
||||
* `!=` (Не равно)
|
||||
@@ -96,15 +164,39 @@ if (x == 10) {
|
||||
int i = 0;
|
||||
while (i < 5) {
|
||||
print("Loop iteration: " + i);
|
||||
i = i + 1;
|
||||
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`. Они имеют доступ к глобальным переменным (общая память).
|
||||
Функции могут быть объявлены с типом возвращаемого значения или `void`.
|
||||
|
||||
**Определение:**
|
||||
|
||||
@@ -112,12 +204,17 @@ while (i < 5) {
|
||||
void myFunc() {
|
||||
print("Hello from function!");
|
||||
}
|
||||
|
||||
int square(int x) {
|
||||
return x * x;
|
||||
}
|
||||
```
|
||||
|
||||
**Вызов:**
|
||||
|
||||
```cpp
|
||||
myFunc();
|
||||
int result = square(5);
|
||||
```
|
||||
|
||||
---
|
||||
@@ -132,7 +229,7 @@ myFunc();
|
||||
4. **Размер:** `size(имя)`
|
||||
|
||||
```cpp
|
||||
array chest 3; // Массив на 3 элемента [0, 0, 0]
|
||||
array chest 3; // Массив на 3 элемента
|
||||
set(chest, 0, 55); // Записать 55 в индекс 0
|
||||
print(get(chest, 0)); // Выведет 55
|
||||
```
|
||||
@@ -141,27 +238,12 @@ print(get(chest, 0)); // Выведет 55
|
||||
|
||||
## 7. Модули и Импорт
|
||||
|
||||
FoxLang v4.0 поддерживает импорт внешних модулей.
|
||||
FoxLang поддерживает импорт внешних модулей.
|
||||
Используйте `include("путь/к/файлу.fox");`.
|
||||
|
||||
**Особенности:**
|
||||
|
||||
* **Важная информация:** При подключении внешних модулей в связи с оссобенностями c++, если в скрипте есть вызов функции в корне скрипта то она тоже будет выполнена при импорте. Это может привести к неожиданным результатам и ошибкам.
|
||||
|
||||
**Пример:**
|
||||
`lib.fox`:
|
||||
|
||||
```cpp
|
||||
void hello() { print("Hi!"); }
|
||||
hello(); // Это выполнтся при импорте
|
||||
```
|
||||
|
||||
`main.fox`:
|
||||
|
||||
```cpp
|
||||
include("lib.fox");
|
||||
hello(); // Мы так же можем вызывать функции из модулей.
|
||||
```
|
||||
* При подключении внешних модулей код, находящийся вне функций, будет выполнен при импорте. Глобальные переменные и функции становятся доступными в текущем файле.
|
||||
|
||||
---
|
||||
|
||||
@@ -173,4 +255,6 @@ hello(); // Мы так же можем вызывать функции из м
|
||||
| `input()` | Останавливает программу и ждет ввода строки от пользователя. |
|
||||
| `round(expr)` | Округляет дробное число до ближайшего целого. |
|
||||
| `random()` | Генерирует случайное число от 0 до 99. |
|
||||
| `fox()` | Пасхалка: выводит ASCII-арт лисы. |
|
||||
| `read_file(filename)` | Читает первую непустую строку из файла (игнорирует комментарии #). |
|
||||
| `http_get(url)` | Выполняет HTTP GET запрос и возвращает ответ сервера. |
|
||||
| `fox()` | Пасхалка: выводит ASCII-арт лисы. |
|
||||
Reference in New Issue
Block a user