868 lines
30 KiB
Markdown
868 lines
30 KiB
Markdown
# π ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ FoxLang v5.0
|
||
|
||
## ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅
|
||
1. [ΠΡΠ½ΠΎΠ²Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°](#1-ΠΎΡΠ½ΠΎΠ²Ρ-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°)
|
||
2. [ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π’ΠΈΠΏΡ](#2-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΠΈ-ΡΠΈΠΏΡ)
|
||
3. [ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ](#3-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅-ΡΡΠ½ΠΊΡΠΈΠΈ)
|
||
4. [ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΠΎΠ³ΠΈΠΊΠ°](#4-ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ°-ΠΈ-Π»ΠΎΠ³ΠΈΠΊΠ°)
|
||
5. [Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ](#5-ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ)
|
||
6. [ΠΠ°ΡΡΠΈΠ²Ρ](#6-ΠΌΠ°ΡΡΠΈΠ²Ρ)
|
||
7. [ΠΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΠΠΌΠΏΠΎΡΡ](#7-ΠΌΠΎΠ΄ΡΠ»ΠΈ-ΠΈ-ΠΈΠΌΠΏΠΎΡΡ)
|
||
8. [ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ](#8-Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅-ΡΡΠ½ΠΊΡΠΈΠΈ)
|
||
9. [Π‘Π΅ΡΠ΅Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ HTTP](#9-ΡΠ΅ΡΠ΅Π²ΡΠ΅-Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ-ΠΈ-http)
|
||
10. [Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ](#10-ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ)
|
||
|
||
---
|
||
|
||
## 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`, ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ Π² ΡΠ΅Π»ΠΎΠ΅ (ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π° Π΄ΡΠΎΠ±Π½Π°Ρ ΡΠ°ΡΡΡ).
|
||
|
||
---
|
||
|
||
## 4. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΠΎΠ³ΠΈΠΊΠ°
|
||
|
||
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°.
|
||
|
||
### ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
|
||
|
||
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `+` | Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ / ΠΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ ΡΡΡΠΎΠΊ | `5 + 5` ΠΈΠ»ΠΈ `"A" + "B"` |
|
||
| `-` | ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅ | `10 - 2` |
|
||
| `*` | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ | `2 * 2` |
|
||
| `/` | ΠΠ΅Π»Π΅Π½ΠΈΠ΅ | `10 / 2` |
|
||
| `%` | ΠΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ | `10 % 3` (Π²Π΅ΡΠ½Π΅Ρ 1) |
|
||
| `++` | ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ (ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° 1) | `i++` (Π²Π΅ΡΠ½Π΅Ρ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΡΠ΅ΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ) |
|
||
|
||
### ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
|
||
|
||
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ `1` (ΠΈΡΡΠΈΠ½Π°) ΠΈΠ»ΠΈ `0` (Π»ΠΎΠΆΡ).
|
||
|
||
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `==` | Π Π°Π²Π½ΠΎ | `x == 5` |
|
||
| `!=` | ΠΠ΅ ΡΠ°Π²Π½ΠΎ | `x != 5` |
|
||
| `<` | ΠΠ΅Π½ΡΡΠ΅ | `x < 10` |
|
||
| `>` | ΠΠΎΠ»ΡΡΠ΅ | `x > 0` |
|
||
|
||
### ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
|
||
|
||
FoxLang ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ boolean Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ:
|
||
|
||
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `&&` | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π (AND) | `(x > 0) && (x < 10)` |
|
||
| `\|\|` | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠΠ (OR) | `(x == 0) \|\| (x == 1)` |
|
||
| `!` | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠ (NOT) | `!(x == 0)` |
|
||
|
||
```cpp
|
||
bool is_valid = (age >= 18) && (age <= 65);
|
||
bool is_weekend = (day == "Saturday") || (day == "Sunday");
|
||
bool is_not_empty = !name.empty();
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
|
||
|
||
### Π£ΡΠ»ΠΎΠ²ΠΈΡ (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);
|
||
}
|
||
```
|
||
|
||
### Switch/Case ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
|
||
|
||
FoxLang ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ `switch/case` Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ `break` ΠΈ `default`:
|
||
|
||
```cpp
|
||
int day = 3;
|
||
switch (day) {
|
||
case 1:
|
||
print("ΠΠΎΠ½Π΅Π΄Π΅Π»ΡΠ½ΠΈΠΊ");
|
||
break;
|
||
case 2:
|
||
print("ΠΡΠΎΡΠ½ΠΈΠΊ");
|
||
break;
|
||
case 3:
|
||
print("Π‘ΡΠ΅Π΄Π°");
|
||
break;
|
||
default:
|
||
print("ΠΡΡΠ³ΠΎΠΉ Π΄Π΅Π½Ρ");
|
||
break;
|
||
}
|
||
```
|
||
|
||
### Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π°ΠΌΠΈ
|
||
|
||
- `break` β ΠΡΠ΅ΡΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ switch
|
||
- `continue` β ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π°
|
||
|
||
```cpp
|
||
for (int i = 0; i < 10; i++) {
|
||
if (i == 5) {
|
||
continue; // ΠΡΠΎΠΏΡΡΡΠΈΡΡ 5
|
||
}
|
||
if (i == 8) {
|
||
break; // ΠΡΠΉΡΠΈ ΠΈΠ· ΡΠΈΠΊΠ»Π°
|
||
}
|
||
print(i);
|
||
}
|
||
```
|
||
|
||
### ΠΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ (Scope)
|
||
|
||
ΠΠ»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° `{ ... }` ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ°, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ½Π°ΡΡΠΆΠΈ.
|
||
|
||
```cpp
|
||
int global = 10;
|
||
{
|
||
int local = 5;
|
||
print(global); // 10
|
||
print(local); // 5
|
||
}
|
||
// print(local); // ΠΡΠΈΠ±ΠΊΠ°! ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ local Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π·Π΄Π΅ΡΡ.
|
||
```
|
||
|
||
---
|
||
|
||
## 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...)` | ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ. ΠΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². | `print("Hello", name);` |
|
||
| `input()` | ΠΠ΄Π΅Ρ Π²Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Ρ. | `string name = input();` |
|
||
| `input(prompt)` | ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΆΠ΄Π΅Ρ Π²Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ. | `string name = input("ΠΠΌΡ: ");` |
|
||
|
||
### ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `round(number)` | ΠΠΊΡΡΠ³Π»ΡΠ΅Ρ Π΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ. | `int x = round(3.7); // 4` |
|
||
| `random(min, max)` | ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ min Π΄ΠΎ max Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ. | `int dice = random(1, 6);` |
|
||
|
||
### Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `read_file(filename)` | Π§ΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΡ Π½Π΅ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° (ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ #). | `string config = read_file("config.txt");` |
|
||
|
||
### HTTP Π·Π°ΠΏΡΠΎΡΡ
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `httpget(url)` | ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ HTTP GET Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°. | `string data = httpget("https://api.example.com");` |
|
||
| `httppost(url, data)` | ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ HTTP POST Π·Π°ΠΏΡΠΎΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. | `string response = httppost(url, "{\"key\":\"value\"}");` |
|
||
| `httppost(url, data, content_type)` | HTTP POST Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. | `httppost(url, data, "application/json");` |
|
||
| `httpput(url, data)` | ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ HTTP PUT Π·Π°ΠΏΡΠΎΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. | `string response = httpput(url, data);` |
|
||
| `httpput(url, data, content_type)` | HTTP PUT Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. | `httpput(url, data, "text/plain");` |
|
||
| `httpdelete(url)` | ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ HTTP DELETE Π·Π°ΠΏΡΠΎΡ. | `string response = httpdelete(url);` |
|
||
|
||
### FastAPI-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `server_start(port)` | ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ HTTP ΡΠ΅ΡΠ²Π΅Ρ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΡ. | `string result = server_start(8080);` |
|
||
| `server_stop()` | ΠΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ HTTP ΡΠ΅ΡΠ²Π΅Ρ. | `string result = server_stop();` |
|
||
| `route_get(path, handler)` | Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ GET ΠΌΠ°ΡΡΡΡΡ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ. | `string result = route_get("/api", "handler");` |
|
||
| `route_post(path, handler)` | Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ POST ΠΌΠ°ΡΡΡΡΡ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ. | `string result = route_post("/users", "create");` |
|
||
| `send_response(data)` | ΠΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ²Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Ρ
). | `send_response("{\"status\":\"ok\"}");` |
|
||
|
||
### Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ JSON
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `json_get(json_string, key)` | ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡΡΡ ΠΈΠ· JSON ΡΡΡΠΎΠΊΠΈ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠ»ΡΡΠΈ: "chat_id", "text", "update_id". | `string chat_id = json_get(response, "chat_id");` |
|
||
| `str_contains(text, substring)` | ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ `true` ΠΈΠ»ΠΈ `false`. | `bool found = str_contains("Hello World", "World");` |
|
||
| `str_to_int(string)` | ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ Π² ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0. | `int num = str_to_int("123");` |
|
||
|
||
### ΠΠ²ΠΎΠ΄ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ (Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ)
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `getch()` | Π§ΠΈΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π±Π΅Π· Π½Π°ΠΆΠ°ΡΠΈΡ Enter. | `string key = getch();` |
|
||
| `kbhit()` | ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π±ΡΠ»Π° Π»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ°. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ `true` ΠΈΠ»ΠΈ `false`. | `bool pressed = kbhit();` |
|
||
|
||
### Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
| --- | --- | --- |
|
||
| `wait(milliseconds)` | ΠΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄. | `wait(1000); // ΠΠ°ΡΠ·Π° 1 ΡΠ΅ΠΊΡΠ½Π΄Π°` |
|
||
| `fox()` | ΠΠ°ΡΡ
Π°Π»ΠΊΠ°: Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° "FoxLang". | `fox();` |
|
||
|
||
---
|
||
|
||
## 9. Π‘Π΅ΡΠ΅Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ HTTP
|
||
|
||
FoxLang ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠΎΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΡ ΠΈ HTTP Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ HTTP ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
|
||
|
||
### HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ - ΠΡΠΏΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ²
|
||
|
||
#### GET Π·Π°ΠΏΡΠΎΡΡ
|
||
```cpp
|
||
// ΠΡΠΎΡΡΠΎΠΉ GET Π·Π°ΠΏΡΠΎΡ
|
||
string response = httpget("https://api.github.com/users/octocat");
|
||
print("Response: " + response);
|
||
|
||
// ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ JSON Π΄Π°Π½Π½ΡΡ
|
||
string user_data = httpget("https://jsonplaceholder.typicode.com/users/1");
|
||
print("User: " + user_data);
|
||
```
|
||
|
||
#### POST Π·Π°ΠΏΡΠΎΡΡ
|
||
```cpp
|
||
// POST Ρ JSON Π΄Π°Π½Π½ΡΠΌΠΈ
|
||
string json_data = "{\"name\":\"John\",\"email\":\"john@example.com\"}";
|
||
string response = httppost("https://jsonplaceholder.typicode.com/users", json_data, "application/json");
|
||
print("Created: " + response);
|
||
|
||
// POST Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ Content-Type (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ application/json)
|
||
string simple_post = httppost("https://httpbin.org/post", "{\"test\":\"data\"}");
|
||
print("POST result: " + simple_post);
|
||
```
|
||
|
||
#### PUT Π·Π°ΠΏΡΠΎΡΡ (ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
)
|
||
```cpp
|
||
// ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΡΡΠ°
|
||
string update_data = "{\"name\":\"John Updated\",\"email\":\"john.new@example.com\"}";
|
||
string updated = httpput("https://jsonplaceholder.typicode.com/users/1", update_data, "application/json");
|
||
print("Updated: " + updated);
|
||
```
|
||
|
||
#### DELETE Π·Π°ΠΏΡΠΎΡΡ (ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
)
|
||
```cpp
|
||
// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°
|
||
string deleted = httpdelete("https://jsonplaceholder.typicode.com/users/1");
|
||
print("Deleted: " + deleted);
|
||
```
|
||
|
||
### Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ API
|
||
|
||
#### ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ REST API
|
||
```cpp
|
||
void work_with_api() {
|
||
string base_url = "https://jsonplaceholder.typicode.com";
|
||
|
||
// ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
|
||
string users = httpget(base_url + "/users");
|
||
print("All users: " + users);
|
||
|
||
// ΠΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
|
||
string user = httpget(base_url + "/users/1");
|
||
print("User 1: " + user);
|
||
|
||
// Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΡ
|
||
string new_post = "{\"title\":\"My Post\",\"body\":\"Post content\",\"userId\":1}";
|
||
string created = httppost(base_url + "/posts", new_post, "application/json");
|
||
print("Created post: " + created);
|
||
|
||
// ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΡ
|
||
string updated_post = "{\"id\":1,\"title\":\"Updated Post\",\"body\":\"New content\",\"userId\":1}";
|
||
string updated = httpput(base_url + "/posts/1", updated_post, "application/json");
|
||
print("Updated post: " + updated);
|
||
|
||
// Π£Π΄Π°Π»ΠΈΡΡ ΠΏΠΎΡΡ
|
||
string deleted = httpdelete(base_url + "/posts/1");
|
||
print("Deleted post: " + deleted);
|
||
}
|
||
|
||
work_with_api();
|
||
```
|
||
|
||
### FastAPI-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ
|
||
|
||
FoxLang ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ `net.fox`:
|
||
|
||
#### ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
|
||
```cpp
|
||
include("src/net.fox");
|
||
|
||
// ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠ°ΡΡΡΡΡΠΎΠ²
|
||
void api_home() {
|
||
json_response("{\"message\":\"Welcome to FoxLang API!\",\"version\":\"5.0.1\"}");
|
||
}
|
||
|
||
void api_users() {
|
||
json_response("{\"users\":[{\"id\":1,\"name\":\"Alice\"},{\"id\":2,\"name\":\"Bob\"}]}");
|
||
}
|
||
|
||
void create_user() {
|
||
json_response("{\"message\":\"User created\",\"id\":3,\"name\":\"Charlie\"}");
|
||
}
|
||
|
||
// ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ°
|
||
void main() {
|
||
// Π‘ΡΠ°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° ΠΏΠΎΡΡΡ 8080
|
||
start_server(8080);
|
||
|
||
// Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ²
|
||
register_get("/", "api_home");
|
||
register_get("/users", "api_users");
|
||
register_post("/users", "create_user");
|
||
|
||
print("π Server running on http://localhost:8080");
|
||
print("Available endpoints:");
|
||
print(" GET / - Welcome message");
|
||
print(" GET /users - List users");
|
||
print(" POST /users - Create user");
|
||
}
|
||
|
||
main();
|
||
```
|
||
|
||
#### ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
|
||
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
|---------|----------|---------|
|
||
| `server_start(port)` | ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ HTTP ΡΠ΅ΡΠ²Π΅Ρ | `server_start(8080);` |
|
||
| `server_stop()` | ΠΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅Ρ | `server_stop();` |
|
||
| `route_get(path, handler)` | Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ GET ΠΌΠ°ΡΡΡΡΡ | `route_get("/api", "handler");` |
|
||
| `route_post(path, handler)` | Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ POST ΠΌΠ°ΡΡΡΡΡ | `route_post("/users", "create");` |
|
||
| `send_response(data)` | ΠΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ²Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ | `send_response("{\"status\":\"ok\"}");` |
|
||
|
||
#### ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° net.fox - ΠΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
|
||
|
||
```cpp
|
||
include("src/net.fox");
|
||
|
||
// Π£Π΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
|
||
start_server(8080); // ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ°
|
||
register_get("/", "handler"); // Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ GET ΠΌΠ°ΡΡΡΡΡΠ°
|
||
register_post("/api", "create"); // Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ POST ΠΌΠ°ΡΡΡΡΡΠ°
|
||
json_response("{\"key\":\"value\"}"); // JSON ΠΎΡΠ²Π΅Ρ
|
||
text_response("Hello World"); // Π’Π΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ
|
||
```
|
||
|
||
### ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ
|
||
|
||
#### HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ API
|
||
```cpp
|
||
void test_external_apis() {
|
||
// Π’Π΅ΡΡ GitHub API
|
||
string github_user = httpget("https://api.github.com/users/octocat");
|
||
print("GitHub user: " + github_user);
|
||
|
||
// Π’Π΅ΡΡ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ API (ΠΏΡΠΈΠΌΠ΅Ρ)
|
||
string weather = httpget("https://api.openweathermap.org/data/2.5/weather?q=Moscow&appid=YOUR_KEY");
|
||
print("Weather: " + weather);
|
||
|
||
// ΠΡΠΏΡΠ°Π²ΠΊΠ° Π΄Π°Π½Π½ΡΡ
Π² webhook
|
||
string webhook_data = "{\"text\":\"Hello from FoxLang!\"}";
|
||
string webhook_response = httppost("https://hooks.slack.com/services/YOUR/WEBHOOK/URL", webhook_data);
|
||
print("Webhook sent: " + webhook_response);
|
||
}
|
||
```
|
||
|
||
#### ΠΡΠΎΡΡΠΎΠΉ API ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π΄Π°Π½Π½ΡΡ
|
||
```cpp
|
||
include("src/net.fox");
|
||
|
||
global array users 10;
|
||
global int user_count = 0;
|
||
|
||
void get_users() {
|
||
string users_json = "{\"users\":[";
|
||
int i = 0;
|
||
while (i < user_count) {
|
||
if (i > 0) {
|
||
users_json = users_json + ",";
|
||
}
|
||
users_json = users_json + "{\"id\":" + i + ",\"name\":\"" + get(users, i) + "\"}";
|
||
i = i + 1;
|
||
}
|
||
users_json = users_json + "],\"total\":" + user_count + "}";
|
||
json_response(users_json);
|
||
}
|
||
|
||
void add_user() {
|
||
if (user_count < 10) {
|
||
set(users, user_count, "User" + user_count);
|
||
user_count = user_count + 1;
|
||
json_response("{\"message\":\"User added\",\"id\":" + (user_count - 1) + "}");
|
||
} else {
|
||
json_response("{\"error\":\"Maximum users reached\"}");
|
||
}
|
||
}
|
||
|
||
void main() {
|
||
start_server(3000);
|
||
register_get("/users", "get_users");
|
||
register_post("/users", "add_user");
|
||
print("API server ready on http://localhost:3000");
|
||
}
|
||
|
||
main();
|
||
```
|
||
|
||
### ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
|
||
|
||
```cpp
|
||
void safe_http_request(string url) {
|
||
string response = httpget(url);
|
||
|
||
if (response == "") {
|
||
print("β Request failed: " + url);
|
||
return;
|
||
}
|
||
|
||
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ (ΠΏΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°)
|
||
if (str_contains(response, "error") || str_contains(response, "Error")) {
|
||
print("β οΈ API returned error: " + response);
|
||
return;
|
||
}
|
||
|
||
print("β
Success: " + response);
|
||
}
|
||
|
||
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
|
||
safe_http_request("https://api.github.com/users/nonexistent");
|
||
safe_http_request("https://api.github.com/users/octocat");
|
||
```
|
||
|
||
### ΠΡΠ°ΡΠΊΠΈΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ HTTP ΡΡΠ½ΠΊΡΠΈΠΉ
|
||
|
||
#### π ΠΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ HTTP ΡΡΠ½ΠΊΡΠΈΠΈ
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
|---------|----------|---------|
|
||
| `httpget(url)` | GET Π·Π°ΠΏΡΠΎΡ | `httpget("https://api.com/users")` |
|
||
| `httppost(url, data)` | POST Π·Π°ΠΏΡΠΎΡ | `httppost(url, "{\"key\":\"value\"}")` |
|
||
| `httppost(url, data, type)` | POST Ρ Content-Type | `httppost(url, data, "application/json")` |
|
||
| `httpput(url, data)` | PUT Π·Π°ΠΏΡΠΎΡ | `httpput(url, "{\"updated\":true}")` |
|
||
| `httpput(url, data, type)` | PUT Ρ Content-Type | `httpput(url, data, "text/plain")` |
|
||
| `httpdelete(url)` | DELETE Π·Π°ΠΏΡΠΎΡ | `httpdelete("https://api.com/item/1")` |
|
||
|
||
#### π Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅)
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
|---------|----------|---------|
|
||
| `server_start(port)` | ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ° | `server_start(8080)` |
|
||
| `server_stop()` | ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° | `server_stop()` |
|
||
| `route_get(path, handler)` | GET ΠΌΠ°ΡΡΡΡΡ | `route_get("/api", "handler")` |
|
||
| `route_post(path, handler)` | POST ΠΌΠ°ΡΡΡΡΡ | `route_post("/users", "create")` |
|
||
| `send_response(data)` | ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΎΡΠ²Π΅ΡΠ° | `send_response("{\"ok\":true}")` |
|
||
|
||
#### π ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° net.fox (Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ)
|
||
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|
||
|---------|----------|---------|
|
||
| `start_server(port)` | Π£Π΄ΠΎΠ±Π½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ° | `start_server(8080)` |
|
||
| `register_get(path, handler)` | Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ GET | `register_get("/", "home")` |
|
||
| `register_post(path, handler)` | Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ POST | `register_post("/api", "create")` |
|
||
| `json_response(json)` | JSON ΠΎΡΠ²Π΅Ρ | `json_response("{\"status\":\"ok\"}")` |
|
||
| `text_response(text)` | Π’Π΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ | `text_response("Hello World")` |
|
||
|
||
#### β‘ ΠΡΡΡΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ
|
||
|
||
**HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ:**
|
||
```cpp
|
||
// GET
|
||
string user = httpget("https://api.github.com/users/octocat");
|
||
|
||
// POST
|
||
string data = "{\"name\":\"John\"}";
|
||
string created = httppost("https://api.com/users", data, "application/json");
|
||
|
||
// PUT
|
||
string updated = httpput("https://api.com/users/1", "{\"name\":\"Jane\"}");
|
||
|
||
// DELETE
|
||
string deleted = httpdelete("https://api.com/users/1");
|
||
```
|
||
|
||
**ΠΠ΅Π±-ΡΠ΅ΡΠ²Π΅Ρ:**
|
||
```cpp
|
||
include("src/net.fox");
|
||
|
||
void api_home() {
|
||
json_response("{\"message\":\"Hello FoxLang API!\"}");
|
||
}
|
||
|
||
void main() {
|
||
start_server(8080);
|
||
register_get("/", "api_home");
|
||
print("π Server: http://localhost:8080");
|
||
}
|
||
|
||
main();
|
||
```
|
||
|
||
#### π§ͺ ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ Π·Π°ΠΏΡΡΠΊ
|
||
```bash
|
||
# ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
|
||
cd src && g++ -std=c++17 main.cpp Lexer.cpp Parser.cpp -o foxlang
|
||
|
||
# ΠΠ°ΠΏΡΡΠΊ HTTP ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
|
||
./foxlang examples/http_demo.fox
|
||
|
||
# ΠΠ°ΠΏΡΡΠΊ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°
|
||
./foxlang examples/fastapi_demo.fox
|
||
```
|
||
|
||
### Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
|
||
|
||
#### Webhook ΠΎΡΠΏΡΠ°Π²ΠΊΠ°
|
||
```cpp
|
||
void send_notification(string message) {
|
||
string webhook_url = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";
|
||
string payload = "{\"text\":\"" + message + "\"}";
|
||
string response = httppost(webhook_url, payload);
|
||
|
||
if (response != "") {
|
||
print("β
Notification sent");
|
||
} else {
|
||
print("β Failed to send notification");
|
||
}
|
||
}
|
||
|
||
send_notification("Hello from FoxLang!");
|
||
```
|
||
|
||
#### ΠΠΎΠ»Π½ΡΠΉ REST API ΡΠ΅ΡΠ²Π΅Ρ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ
|
||
```cpp
|
||
include("src/net.fox");
|
||
|
||
global array users 10;
|
||
global int user_count = 0;
|
||
|
||
void get_users() {
|
||
string users_json = "{\"users\":[";
|
||
int i = 0;
|
||
while (i < user_count) {
|
||
if (i > 0) {
|
||
users_json = users_json + ",";
|
||
}
|
||
users_json = users_json + "{\"id\":" + i + ",\"name\":\"" + get(users, i) + "\"}";
|
||
i = i + 1;
|
||
}
|
||
users_json = users_json + "],\"total\":" + user_count + "}";
|
||
json_response(users_json);
|
||
}
|
||
|
||
void add_user() {
|
||
if (user_count < 10) {
|
||
set(users, user_count, "User" + user_count);
|
||
user_count = user_count + 1;
|
||
json_response("{\"message\":\"User added\",\"id\":" + (user_count - 1) + "}");
|
||
} else {
|
||
json_response("{\"error\":\"Maximum users reached\"}");
|
||
}
|
||
}
|
||
|
||
void main() {
|
||
start_server(3000);
|
||
register_get("/users", "get_users");
|
||
register_post("/users", "add_user");
|
||
print("API server ready on http://localhost:3000");
|
||
}
|
||
|
||
main();
|
||
```
|
||
|
||
#### Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ
API
|
||
```cpp
|
||
void test_multiple_apis() {
|
||
print("π§ͺ Testing multiple APIs:");
|
||
|
||
// GitHub API
|
||
string github = httpget("https://api.github.com/users/octocat");
|
||
print("GitHub API: " + github);
|
||
|
||
// JSONPlaceholder API
|
||
string posts = httpget("https://jsonplaceholder.typicode.com/posts/1");
|
||
print("JSONPlaceholder: " + posts);
|
||
|
||
// HTTPBin Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ POST
|
||
string test_post = httppost("https://httpbin.org/post", "{\"test\":\"data\"}");
|
||
print("HTTPBin POST: " + test_post);
|
||
|
||
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°
|
||
string new_post = "{\"title\":\"FoxLang Test\",\"body\":\"API testing\"}";
|
||
string created = httppost("https://jsonplaceholder.typicode.com/posts", new_post);
|
||
print("Created post: " + created);
|
||
}
|
||
|
||
test_multiple_apis();
|
||
```
|
||
|
||
#### ΠΡΠΎΡΡΠΎΠΉ ΡΡΠ΅ΡΡΠΈΠΊ API
|
||
```cpp
|
||
include("src/net.fox");
|
||
|
||
global int counter = 0;
|
||
|
||
void get_counter() {
|
||
json_response("{\"counter\":" + counter + ",\"message\":\"Current value\"}");
|
||
}
|
||
|
||
void increment_counter() {
|
||
counter = counter + 1;
|
||
json_response("{\"counter\":" + counter + ",\"message\":\"Incremented\"}");
|
||
}
|
||
|
||
void decrement_counter() {
|
||
counter = counter - 1;
|
||
json_response("{\"counter\":" + counter + ",\"message\":\"Decremented\"}");
|
||
}
|
||
|
||
void reset_counter() {
|
||
counter = 0;
|
||
json_response("{\"counter\":0,\"message\":\"Reset to zero\"}");
|
||
}
|
||
|
||
void main() {
|
||
start_server(4000);
|
||
|
||
register_get("/counter", "get_counter");
|
||
register_post("/counter/increment", "increment_counter");
|
||
register_post("/counter/decrement", "decrement_counter");
|
||
register_post("/counter/reset", "reset_counter");
|
||
|
||
print("π’ Counter API running on http://localhost:4000");
|
||
print("Available endpoints:");
|
||
print(" GET /counter - Get current value");
|
||
print(" POST /counter/increment - Add 1");
|
||
print(" POST /counter/decrement - Subtract 1");
|
||
print(" POST /counter/reset - Reset to 0");
|
||
}
|
||
|
||
main();
|
||
```
|
||
|
||
### Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ
|
||
|
||
#### Content-Type Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ
|
||
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ POST/PUT ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ `application/json`
|
||
- ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ²ΠΎΠΉ: `httppost(url, data, "text/plain")`
|
||
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ: `application/json`, `text/plain`, `application/x-www-form-urlencoded`
|
||
|
||
#### ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠ²Π΅ΡΠΎΠ²
|
||
- ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ `string` Ρ ΡΠ΅Π»ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ°
|
||
- ΠΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° `""` ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
|
||
- HTTP ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΎΠΊ (404, 500) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π»ΠΎ ΠΎΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°
|
||
|
||
#### Π‘Π΅ΡΠ²Π΅Ρ
|
||
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ HTTP ΡΠ΅ΡΠ²Π΅ΡΠ°
|
||
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ GET ΠΈ POST ΠΌΠ΅ΡΠΎΠ΄Ρ
|
||
- JSON ΠΎΡΠ²Π΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Content-Type
|
||
- Π‘Π΅ΡΠ²Π΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
|
||
|
||
---
|
||
|
||
## 10. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
|
||
|
||
FoxLang ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ:
|
||
|
||
### ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ
|
||
|
||
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°ΡΡΡ
Π²Π΅ΡΡΠΈΠΉ, FoxLang ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ:
|
||
|
||
```cpp
|
||
// ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
|
||
string user_name = "john_doe";
|
||
int max_health = 100;
|
||
bool is_game_over = false;
|
||
|
||
// Π€ΡΠ½ΠΊΡΠΈΠΈ
|
||
void calculate_damage(int base_damage, float multiplier) {
|
||
// ...
|
||
}
|
||
|
||
int get_player_score() {
|
||
return player_score;
|
||
}
|
||
```
|
||
|
||
### ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
|
||
|
||
FoxLang ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ `global`:
|
||
|
||
```cpp
|
||
global int game_score = 0;
|
||
global string player_name = "Unknown";
|
||
|
||
void update_score(int points) {
|
||
game_score = game_score + points;
|
||
}
|
||
|
||
void main() {
|
||
print("Score: " + game_score);
|
||
update_score(100);
|
||
print("New score: " + game_score);
|
||
}
|
||
```
|
||
|
||
### ΠΡΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
|
||
|
||
```cpp
|
||
// Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ
|
||
bool check_user_permissions(string user_role, int required_level) {
|
||
if (user_role == "admin") {
|
||
return true;
|
||
}
|
||
|
||
int user_level = get_user_level(user_role);
|
||
return user_level >= required_level;
|
||
}
|
||
|
||
// Π Π°Π±ΠΎΡΠ° Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ
|
||
void sort_user_scores(array scores, int count) {
|
||
for (int i = 0; i < count - 1; i++) {
|
||
for (int j = 0; j < count - i - 1; j++) {
|
||
if (get(scores, j) > get(scores, j + 1)) {
|
||
int temp = get(scores, j);
|
||
set(scores, j, get(scores, j + 1));
|
||
set(scores, j + 1, temp);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|