Skip to content

Module Pattern

Ilovangiz va codebase ingiz o‘sib borishi bilan, code ni maintainable va separated holda saqlash tobora muhimroq bo‘lib boradi. Module pattern sizga code ni kichikroq, reusable qismlarga bo‘lish imkonini beradi. Shuningdek, u code encapsulation ni qo‘llab-quvvatlaydi, chunki module ichidagi values default holatda private bo‘lib, module ichida saqlanadi va tashqaridan o‘zgartirib bo‘lmaydi. Faqat export keywordi orqali export qilingan values boshqa fayllar uchun accessible bo‘ladi. Agar biz ma’lum bir value ni explicit ravishda export qilmasak, o‘sha value moduldan tashqarida mavjud bo‘lmaydi. Bu, codebase ning boshqa qismlarida e’lon qilingan values uchun name collision xavfini kamaytiradi, chunki bu values global scope’da mavjud bo‘lmaydi.

Demak, biz Modul pattern yordamida:

  • Global scope ni ifloslantirmaymiz
  • Kodni reusable va maintainable qila olamiz
  • Private va public methodlar/variables yaratishimiz mumkin

ES2015 JavaScriptga built-in module larni olib keldi. Module — bu JavaScript codeni o‘z ichiga olgan fayl bo‘lib, oddiy script bilan solishtirganda behavior ida ayrim farqlarga ega.

ES2015da modul yaratish uchun export va import kalit so‘zlari ishlatiladi.

// math.js (Named export)
const PI = 3.14159;
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
// export qilamiz
export { PI, add, multiply };
// logger.js (Default export)
export default function log(message) {
console.log('LOG:', message);
}
main.js
import { PI, add, multiply } from './math.js';
import log from './logger.js';
console.log(add(2, 3)); // 5
console.log(PI); // 3.14159
log('Module pattern ishlaydi!'); // LOG: Module pattern ishlaydi!

ES2015 module pattern bilan private variables va functions yaratish mumkin:

counter.js
let count = 0; // private variable
function increment() { // private function
count++;
}
function getCount() { // public function
return count;
}
// public interface
export default {
increment,
getCount
};
main.js
import counter from './counter.js';
counter.increment();
counter.increment();
console.log(counter.getCount()); // 2

Bu yerda count va increment global scopeda mavjud emas, faqat counter orqali ulanish mumkin.