صياغة الأصناف الأساسية (Class Basic Syntax) في جافاسكربت
في لغة جافاسكربت، تعتبر الأصناف (Classes) أحد المفاهيم الأساسية التي تسهم بشكل كبير في تنظيم وإدارة الكود البرمجي بطريقة أكثر هيكلية ومرونة. تم تقديم الأصناف في جافاسكربت ضمن إصدار ECMAScript 6 (ES6)، حيث أصبحت جزءًا من اللغة بشكل رسمي، مما أتاح للمطورين استخدام مفاهيم البرمجة الشيئية (OOP) بشكلٍ أسهل وأبسط. في هذا المقال، سيتم تناول كيفية صياغة الأصناف الأساسية في جافاسكربت، بدءًا من بناء الصنف نفسه، وصولاً إلى كيفية تعريف المتغيرات (properties) والدوال (methods) داخل هذا الصنف.
1. ما هي الأصناف في جافاسكربت؟
الأصناف في جافاسكربت هي قالب أو مخطط يتم من خلاله إنشاء كائنات (Objects) تتشارك في نفس الخصائص (properties) والدوال (methods). الصنف هو بمثابة مصنع يُستخدم لإنشاء كائنات متعددة ولكنها تحتوي على نفس السمات والوظائف. الأصناف توفر طريقة لإنشاء كود أكثر تنظيماً، ما يساعد في تقليل التكرار وجعل الصيانة أسهل في المشاريع الكبيرة والمعقدة.
2. بناء الصنف الأساسي في جافاسكربت
تعريف صنف في جافاسكربت يتم باستخدام الكلمة المفتاحية class. يمكننا تعريف الصنف في جافاسكربت عبر الصيغة التالية:
javascriptclass ClassName {
// داخل الصنف
}
حيث ClassName هو اسم الصنف الذي نقوم بإنشائه. هناك عدة أجزاء يمكن إضافتها إلى هذا الصنف، مثل البنية الأساسية (constructor) والدوال (methods) التي تحدد وظائفه.
3. البنية الأساسية (Constructor)
عند تعريف صنف جديد، يمكننا إضافة دالة خاصة تسمى constructor، وهي تُستخدم لتهيئة الكائنات التي يتم إنشاؤها من هذا الصنف. تقوم الدالة constructor بتعيين القيم الأولية للمتغيرات الخاصة بالصنف عند إنشائه.
مثال:
javascriptclass Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
في المثال أعلاه، Person هو الصنف الذي يحتوي على بنية أساسية تقبل معاملين: name و age. يقوم الكود داخل constructor بتخزين القيم التي يتم تمريرها عند إنشاء الكائنات في الخصائص this.name و this.age.
4. إنشاء كائنات من الصنف
بعد أن قمنا بتعريف الصنف Person، يمكننا الآن إنشاء كائنات (objects) بناءً على هذا الصنف. يتم ذلك باستخدام الكلمة المفتاحية new، والتي تتيح لنا استدعاء البنية الأساسية (constructor) لإنشاء الكائن الجديد.
مثال:
javascriptconst person1 = new Person("Ali", 30);
const person2 = new Person("Sara", 25);
هنا تم إنشاء كائنين من الصنف Person: الكائن الأول يحمل الاسم “Ali” والعمر 30، والكائن الثاني يحمل الاسم “Sara” والعمر 25.
5. إضافة الدوال (Methods) إلى الأصناف
يمكن إضافة دوال (أو وظائف) داخل الأصناف، وهذه الدوال عادة ما تُستخدم لتنفيذ عمليات على الخصائص (properties) أو تعديلها. الدوال يمكن تعريفها باستخدام الصيغة التالية:
javascriptclass Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
في هذا المثال، قمنا بإضافة دالة greet إلى الصنف Person. هذه الدالة تستخدم console.log لعرض رسالة تحتوي على اسم الشخص وعمره.
يمكننا الآن استدعاء الدالة greet على الكائنات التي تم إنشاؤها من الصنف:
javascriptconst person1 = new Person("Ali", 30);
person1.greet(); // Output: "Hello, my name is Ali and I am 30 years old."
6. الوراثة في الأصناف (Inheritance)
في جافاسكربت، يمكن للأصناف أن ترث من أصناف أخرى، مما يسمح بإعادة استخدام الكود وتوسيع الخصائص والدوال للصنف الأب. يتم ذلك باستخدام الكلمة المفتاحية extends، التي تُستخدم لإنشاء صنف يرث من صنف آخر.
مثال على الوراثة:
javascriptclass Employee extends Person {
constructor(name, age, jobTitle) {
super(name, age); // استدعاء البنية الأساسية للصنف الأب (Person)
this.jobTitle = jobTitle;
}
describeJob() {
console.log(`${this.name} works as a(n) ${this.jobTitle}.`);
}
}
في هذا المثال، صنف Employee يرث من الصنف Person. في البنية الأساسية لـ Employee، قمنا باستخدام super(name, age) لاستدعاء البنية الأساسية للصنف الأب Person وتوريث الخصائص الخاصة به. ثم أضفنا خاصية جديدة jobTitle ودالة describeJob.
يمكننا الآن إنشاء كائنات من صنف Employee واستخدام خصائص ودوال الصنف الأب بالإضافة إلى خصائص ودوال الصنف الابن:
javascriptconst employee1 = new Employee("Ahmed", 28, "Software Engineer");
employee1.greet(); // Output: "Hello, my name is Ahmed and I am 28 years old."
employee1.describeJob(); // Output: "Ahmed works as a(n) Software Engineer."
7. استخدام الكلمة المفتاحية static
في جافاسكربت، يمكن تعريف دوال ثابتة (static methods) داخل الأصناف. الدوال الثابتة هي التي يمكن استدعاؤها مباشرة من الصنف دون الحاجة لإنشاء كائن من الصنف. يتم تعريف الدوال الثابتة باستخدام الكلمة المفتاحية static.
مثال على دالة ثابتة:
javascriptclass MathHelper {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
يمكننا الآن استدعاء الدوال الثابتة مباشرة من الصنف دون الحاجة لإنشاء كائن:
javascriptconsole.log(MathHelper.add(5, 3)); // Output: 8
console.log(MathHelper.multiply(4, 2)); // Output: 8
8. الوصول إلى الخصائص والطرق
داخل الدوال (methods)، يمكن الوصول إلى خصائص الكائن عبر الكلمة المفتاحية this. كما يمكن استخدام this للوصول إلى خصائص ودوال أخرى داخل الصنف. على سبيل المثال، داخل دالة greet، نستخدم this.name للإشارة إلى اسم الشخص في الكائن الحالي.
9. الكلمة المفتاحية super
الكلمة المفتاحية super تستخدم لاستدعاء وظائف من الصنف الأب، سواء كانت البنية الأساسية (constructor) أو دوال أخرى. في مثال الوراثة، قمنا باستخدام super(name, age) لاستدعاء البنية الأساسية للصنف Person.
10. الخصائص والمحددات (Getters and Setters)
جافاسكربت يسمح باستخدام الخصائص المعدلة (getters) والخصائص المعدلة (setters) للتحكم في الوصول إلى الخصائص داخل الأصناف. يمكن استخدام get و set لتحديد طرق الوصول والتعديل للخصائص.
مثال:
javascriptclass Circle {
constructor(radius) {
this._radius = radius;
}
get radius() {
return this._radius;
}
set radius(value) {
if (value <= 0) {
console.log("Radius must be a positive number.");
} else {
this._radius = value;
}
}
}
في هذا المثال، قمنا بتحديد خاصية radius باستخدام get و set. يمكننا الآن الوصول إلى قيمة radius وتعديلها بطريقة مخصصة.
javascriptconst circle = new Circle(5);
console.log(circle.radius); // Output: 5
circle.radius = -3; // Output: "Radius must be a positive number."
circle.radius = 10;
console.log(circle.radius); // Output: 10
11. الختام
إن صياغة الأصناف في جافاسكربت تعطي للمطورين القدرة على تنظيم الكود بطرق فعّالة تساعد في تسهيل الصيانة والتوسعة المستقبلية. باستخدام هذه المفاهيم الأساسية، مثل البنية الأساسية (constructor)، الدوال (methods)، الوراثة (inheritance)، الكلمة المفتاحية static، وكذلك getters و setters، يمكن كتابة تطبيقات معقدة ومرنة في جافاسكربت باستخدام البرمجة الشيئية.

