Инкапсуляция
Инкапсуляция
Сразу скажу тем, кто не знает этого слова, что это совсем не страшно и могут понять даже новички! Начнем с определения:
Инкапсуляция (англ.encapsulation, от лат.in capsula) — в информатике упаковка данных и функций в единый компонент. (Википедия)
Простыми словами – упаковка и сокрытие данных и/или функций, отвечающих за одно и то же, в одном месте. Ярким примером является распределение методов ModPE API – по классам Block, Entity, Item, Level, ModPE, Player, Server (не все страницы есть, надо делать, вы можете мне помочь ;-)).
Теперь представьте себе такую картину – все функции 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, так что для его запуска вам даже не пригодится планшет или телефон)
Вот и все! Теперь у вас на вооружении есть еще один мощный инструмент разработчика!
Comments