-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
24 changed files
with
578 additions
and
204 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Время жизни | ||
|
||
Экземпляры класса умирают когда интерпретатор уйдёт из области видимости, в которой объявлена переменная. | ||
|
||
Чтоб освободить принудительно освободить ссылку ей нужно присвоить другое значение или [](null.md). | ||
|
||
```C# | ||
class A { | ||
string s; | ||
|
||
A(string s){ | ||
[[[this|this.md]]].s = s; | ||
} | ||
|
||
[[[~|destructor.md]]]A(){ | ||
print(s + " destruct\n"); | ||
} | ||
} | ||
|
||
A@ a; // [[[Глобальные переменные|var.md#global]]] живут до конца игры | ||
void [[[main|main.md]]](){ | ||
@a = A("1"); // Создаём экземпляр 1, который не будет уничтожен после завершения функции | ||
@a = A("2"); // Уничтожаем экземпляр 1 поместив на его место экземпляр 2 | ||
@a = null; // Принудительно уничтожаем экземпляр 2 | ||
A@ b = A("3"); // Создаём экземпляр 3, который будет уничтожен после завершения функции | ||
/* Вывод консоли: | ||
1 destruct | ||
2 destruct | ||
3 destruct | ||
*/ | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# Аргументы по ссылке | ||
|
||
По умолчанию аргументы в функцию передаются по значению, то бишь при входе в функцию значения всех переданных в функцию | ||
аргументов копируются. Для расширения возможностей существует несколько типов передачи аргументов по ссылке. | ||
|
||
## in {id="in"} | ||
|
||
Входящая ссылка только для чтения. При работе со строками может сэкономить вам памяти, так как не будет происходить | ||
копирование памяти. | ||
|
||
```C# | ||
void A(string& in B){ | ||
print(B); | ||
} | ||
string C = "Привет!"; | ||
void [[[main|main.md]]] { | ||
A(C); // В функцию будет передана ссылка на переменную, копирование памяти не произойдёт. | ||
A("Допустимо передавать значение напрямую без помещения в переменную"); | ||
} | ||
``` | ||
|
||
> Использование с [примитивами](data-types.md#primitive) допустимо, но бесполезно. | ||
### const {id="in-const"} | ||
|
||
При попытке присвоить значение входящей ссылке компилятор сгенерирует ошибку. Посему для пущей оптимизации и явного | ||
указания недопустимости записи рекомендуется явно указывать [const](https://xgm.guru/p/ij/angelscript-function#const): | ||
|
||
```C# | ||
void A(string& in B, const string& in C){ | ||
B = "Ошибка! Запрещено присваивать значение входящим ссылкам!"; | ||
C = "Ошибка! Аргумент C объявлен как const" | ||
} | ||
``` | ||
|
||
### out {id="out"} | ||
|
||
Ссылка для записи выходного значения. | ||
|
||
```C# | ||
int divide(int a, int b, int& out remainder) { | ||
remainder = a % b; // записываем остаток от деления в переменную для выхода | ||
return a / b; // возвращаем результат деления | ||
} | ||
|
||
void [[[main|main.md]]]() { | ||
int remainder; | ||
int result = divide(10, 3, remainder); | ||
} | ||
``` | ||
|
||
С помощью ключевого слова `void` можно сделать выходной параметр необязательным. | ||
|
||
```C# | ||
int divide(int a, int b, int& out remainder = void) { | ||
remainder = a % b; // записываем остаток от деления в переменную для выхода | ||
return a / b; // возвращаем результат деления | ||
} | ||
|
||
void [[[main|main.md]]]() { | ||
int result = divide(10, 3); | ||
} | ||
``` | ||
|
||
## inout {id="inout"} | ||
|
||
Ссылка для входа-выхода. Просто указывает на фактическое значение. Для обеспечения гарантии того, что ссылка будет | ||
существовать всё время существования функции разрешено передавать только ссылочные типы. | ||
|
||
> Рекомендуется использовать короткую запись в виде `&`. | ||
```C# | ||
funcdef void A(); // Объявляем сигнатуру функции. | ||
void B(){ | ||
print("Функция вызвана по ссылке"); | ||
} | ||
void C(A& D){ | ||
D(); // Вызываем функцию, переданную по ссылке | ||
}; | ||
void [[[main|main.md]]](){ | ||
C(@B); // Передаём функцию по ссылке | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 1 addition & 20 deletions
21
Writerside/topics/class-method.md → Writerside/topics/method-const.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# Методы класса | ||
|
||
[](https://www.angelcode.com/angelscript/sdk/docs/manual/doc_script_class_methods.html) | ||
|
||
Методы это функции, которые привязаны к экземпляру [класса](class.md). | ||
|
||
```C# | ||
class A { | ||
void a(string b) { | ||
print(b); | ||
} | ||
} | ||
|
||
void [[[main|main.md]]](){ | ||
A a; | ||
a.a("Вызываем метод класса и передаём ему строку аргументом"); | ||
} | ||
``` |
Oops, something went wrong.