Инкапсуляция

Инкапсуляция

Сразу скажу тем, кто не знает этого слова, что это совсем не страшно и могут понять даже новички! Начнем с определения:

Инкапсуляция (англ.encapsulation, от лат.in capsula) — в информатике упаковка данных и функций в единый компонент. (Википедия)

Простыми словами — упаковка и сокрытие данных и/или функций, отвечающих за одно и то же, в одном месте. Ярким примером является распределение методов ModPE API — по классам BlockEntityItemLevelModPEPlayerServer (не все страницы есть, надо делать, вы можете мне помочь ;-)).

Теперь представьте себе такую картину — все функции ModPE находятся в глобальном пространстве имен. Хотя, лучше не представляйте, иначе ModPE покажется вам огромным неповоротливым существом, с которым просто невозможно работать))) Но чем же полезна инкапсуляция нам, простым смертным  скриптерам?

Конечно же, речь пойдет о больших объемах кода — именно их стоит разбивать на объекты и функции. Примером таких объектов служат библиотеки NIDE. Прежде всего, следует определить, что именно надо упаковать в объект. Например, у нас в коде есть 5 функций:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function createMachine(type, x, y, z){
    //...
    return id;
}
function getMachineX(id){
    //...
}
function getMachineY(id){
    //...
}
function getMachineZ(id){
    //...
}
function getMachineState(id){
    //..
}
//и так далее...

Понятно, что пользоваться такими функциями можно до тех пор, пока различных подобных кусков кода немного. Чем больше разных систем есть в моде (и не только в моде), тем сложнее таким кодом управлять. Давайте перепишем этот код:

1
2
3
4
5
6
7
8
9
10
function Machine(type, x, y, z){
    this.x = x;
    this.y = y;
    this.z = z;
    this.type = type;
    this.getState = function(){
        //...
    };
    //и так далее...
}

Так код выглядит лаконичнее, доступ и использование его намного удобнее.

Введем еще один класс для определения видов устройств:

1
2
3
4
var MachineType = {
    cutter: "cutter",
    slicer: "slicer"
}

Вот пример использования:

1
2
3
4
5
6
7
8
9
var machines = [];
 
machines[1] = new Machine(MachineType.cutter, 10, 15, 11);
machines[2] = new Machine(MachineType.slicer, 327, 23, 98);
 
machines[2].getState();
 
print(machines[1].x);
print(machines[2].type);

Стоит заметить, что данный код может запускаться не только Blocklaunchr’ом, но и jsRunner’ом, встроенным в программу NIDE, так что для его запуска вам даже не пригодится планшет или телефон)

Вот и все! Теперь у вас на вооружении есть еще один мощный инструмент разработчика!

Запись опубликована в рубрике ModPE. Добавьте в закладки постоянную ссылку.

Comments

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *