تعلم البرمجة باستخدام JavaScript


الدرس: تحديد أساليب وخصائص المثيل


الصفحة السابقة

تذكير بمفهوم خاصية الطبقة


قبل مناقشة فكرة طريقة المثيل ، والتي سنركز عليها في هذه الدورة ، من المهم شرح مفهوم خاصية الفئة. إنه متغير داخلي لهذه الفئة يمكننا تحديده افتراضيًا والتغيير أثناء تنفيذ الكود الخاص بنا. ليس من غير المألوف استخدام مصطلح "سمة" بدلاً من "خاصية" ، ولكنه يمثل نفس الشيء.

دعونا نأخذ على سبيل المثال فئة تمثل حسابًا مصرفيًا ، والتي نسميها BankAccount  . يمكن للمرء أن يجد خصائص   owner  (السماح بتحديد صاحب الحساب) و    balance  (السماح بمعرفة المبلغ المتاح في الحساب) . وبالتالي ، عندما نقوم بإنشاء مثيل    BankAccount  مع مالك ومبلغ أولي كوسيطة ، يمكننا لاحقًا استخدام هذه الخصائص لعرض قيمها ، واستخدامها في العمليات الحسابية ، وتعديلها ، وما إلى ذلك.

استفد من الفئات باستخدام طرق المثيل



إذا عدت إلى الفصل الخاص بالفئات ، فقد استخدمناها لإنشاء كائنات ذات خصائص معينة. الآن بعد أن بدأت في استكشاف الوظائف ، يمكنك إضافة طرق مثيل إلى هذه الفئات ، لزيادة قوتها وفائدتها.

طريقة المثيل هي وظيفة جزء من فئة ، وتعمل على مثيل من هذه الفئة. لنأخذ فئة المثال    BankAccount  (الحساب المصرفي) :


class BankAccount {


constructor(owner, balance) {


   this.owner = owner;


   this.balance = balance;


}


}
 
يمكنك بعد ذلك إنشاء مثيل من هذه الفئة يسمى newAccount (حساب جديد) :

const newAccount = new BankAccount("Will Alexander", 500);
 
تذكر أن الكائن (مثيل الفئة هو كائن) هو نوع حسب المرجع ، لذلك يمكنك دائمًا إجراء تغييرات على المثيل     newAccount    - يشير الجزء الثابت إلى مرجع لهذا المثال.

كما هو ، فإن المثال ليس مفيدًا جدًا. يمكنك عرض توازنه في وحدة التحكم     newAccount.balance  ، ولكن ماذا لو فكرنا في إضافة التنسيق بدلاً من ذلك؟ يمكنك إضافة طريقة إلى الفئة!


class BankAccount {


constructor(owner, balance) {


   this.owner = owner;


   this.balance = balance;


}


showBalance() {


   console.log("Solde: " + this.balance + " EUR");


}


}
 
الطريقة الجديدة أعلاه ، التي تم الإعلان عنها باسمها متبوعًا بـ () ، تستخدم الكلمة الأساسية    this  للوصول      إلى خاصية المثيل balance ، وعرضها على وحدة التحكم بتنسيق إضافي. هذا يعني أنه يمكنك استخدام الترميز النقطي على المثيل    newAccount  لاستدعاء الطريقة الخاصة به    showBalance()  :


const newAccount = new BankAccount("Will Alexander", 500);




newAccount.showBalance(); // يطبع "الرصيد: 500 يورو" على وحدة التحكم
 
يمكنك أيضًا إضافة طرق قادرة على تعديل خصائص المثيل. في هذه الحالة ، أضف      طريقتي deposit()  (الإيداع) و    withdraw()(السحب) إلى الفئة، مع تذكر أن كلاهما يحتاج إلى معلمة    amount  (مبلغ) (لأنك بحاجة إلى معرفة مقدار الإيداع أو السحب!):


class BankAccount {

 

constructor(owner, balance) {

 

this.owner = owner;

 

this.balance = balance;

 

}

 

 

 

showBalance() {

 

      console.log("Solde: " + this.balance + " EUR");

 

}

 

 

 

deposit(amount) {

 

      console.log("Dépôt de " + amount + " EUR");

 

this.balance += amount;

 

this.showBalance();

 

}

 

 

 

withdraw(amount) {

 

if (amount > this.balance) {

 

         console.log("Retrait refusé !");

 

} else {

 

         console.log("Retrait de " + amount + " EUR");

 

this.balance -= amount;

 

this.showBalance();

 

}

 

}

 

}
 
  تعرض الطريقة  deposit()  مبلغ الإيداع إلى وحدة التحكم ، وتضيف المبلغ إلى رصيد المثيل ، ثم تستدعي طريقة      المثيل showBalance()، وبالتالي طباعة الرصيد الجديد في وحدة التحكم.

في جسم الفئة ، تشير الكلمة الأساسية this إلى مثيل الفئة التي تم إنشاؤها. في هذا المثال ، يشير إلى    newAccount  .

  تتحقق الطريقة withdraw() مما    إذا كان المبلغ المطلوب أكبر من الرصيد الحالي. إذا كان الأمر كذلك ، فهو يرفض السحب ؛ وإلا فإنه يأذن بذلك ، بطرح المبلغ من الرصيد وعرض الرصيد الجديد على وحدة التحكم.

تدرب على طرق المثيل


JavaScript
الآن دعنا نرى كيفية استخدام طرق المثيل لتسجيل تطبيق عرض الفيديو (video broadcast).

انتقل إلىمحرر CodePen  هذا .

بدلاً من استخدام دالة لحساب معدل ​​الدرجات لسلسلة ما ، قررنا أن فئة العرض (أو "السلسلة") يجب أن تتعامل مع النتائج الجديدة تلقائيًا.

كما ترى ،  تحتوي الفئة Show   على   Array  ratings  ، للدرجات ، والذي تمت تهيئته فارغًا ، وخاصية    averageRating  (درجة متوسطة) بقيمة صفر.

  1. 1. قم بتعريف طريقة مثيل في الفئة Show واطلق عليها اسم  addRating()  . سوف تأخذ    rating  (العدد) ، والذي سيكون رقمًا بين 1 و 5 ، كمعامل.
  2. 2. addRating()   يجب أن تكون الطريقة    :
    • إضافة العدد الوارد إلى جدول   ratings  ؛
    • إعادة حساب قيمة  averageRating  المثيل.
انقر فوق الزر " Check ratings " للتحقق مما إذا كانت السلسلة يتم تحديثها بشكل صحيح. يمكنك النقر فوق الزر عدة مرات لمشاهدة تطور معدل ​​الدرجات.

الحل المقترح



اكتشف الطرق الثابتة



هناك نوع خاص من الطرق التي يمكن إضافتها إلى فئة: الطريقة الثابتة . وهي تختلف عن أساليب المثال لأنها ليست مرتبطة بمثيل معين  لفئة، ولكن إلى الفئة نفسها. استخدمها لإنشاء طرق الأداة المساعدة (المساعد) حيث لا تحتاج إلى مثيل لفئة لاستخدامها. ستكون قادرًا على استخدامها كصندوق أدوات للوظائف التي ستستخدمها كثيرًا.

على سبيل المثال ، في JavaScript ،    يحتوي الكائن Math على العديد من الطرق المفيدة:


const randomNumber = Math.random(); //[0 ، 1] إنشاء رقم عشوائي بين 

 

const roundMeDown = Math.floor(495.966); // تقريب العدد لأسفل إلى أقرب عدد صحيح ، وإرجاع 495
 
لا تحتاج إلى إنشاء      مثيل للكائن Math    باستعمال new   لاستخدام هذه الطرق ؛ يكفي أن ندعوهم على الكائن    Math  .

تم استخدام هاتين الطريقتين في التمرين السابق في الخلفية ، لإنشاء عدد عشوائي من التصنيفات لمكونات السلسلة!

يمكنك إنشاء الطرق الثابتة الخاصة بك عن طريق الكلمة الأساسية    static  !

ضع في اعتبارك الفئة التالية:


class BePolite {
    
    static sayHello() {
    
          console.log("Hello!");
    }
    
    
    static sayHelloTo(name) {
    
          console.log("Hello " + name + "!");
    }
    
    
    static add(firstNumber, secondNumber) {
        
    return firstNumber + secondNumber;
    
    
    }
    
    
    }
    
     
    BePolite.sayHello(); // "Hello!" يطبع 
    
    BePolite.sayHelloTo("Will"); // "Hello Will!"يطبع
    
    const sum = BePolite.add(2, 3); // sum = 5
 
لست بحاجة إلى إضافة constructor إلى فئتك ، لأنك لن تقوم بإنشاء مثيل لها. لديك طريقة:
  • تطبع رسالة عامة ؛
  • تقبل المعلمة وتستخدمها لإنشاء رسالة ؛
  • تُرجع قيمة من الوسائط التي ترسلها إليها.
يمكن أن تكون كل هذه الميزات وظائف ، ولكن ميزة استخدام طرق الفئة الثابتة هي ، على سبيل المثال ، القدرة على تجميعها حسب الفئة أو النوع.

باختصار



في هذا الفصل ، نظرنا إلى نوعين من طرق الفئة:

  • طرق المثيل ، التي تعمل على الحالات الفردية للفئة ؛
  • الأساليب الثابتة ، التي لا تعتمد على مثيل للفئة.
في الفصل التالي ، سنرى كيفية كتابة الوظائف ، والتعليمات البرمجية النظيفة التي يسهل قراءتها وصيانتها وتكييفها!