Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

جافاسكربتالدوال الثابتة

  • مفهوم الدوال الثابتة
  • تعريف دالة ثابتة في الكلاس
  • إستدعاء دالة ثابتة من دالة ثابتة
  • إستدعاء دالة ثابتة في الكونستركتور

مفهوم الدوال الثابتة

الدالة الثابتة ( Static Method ) هي دالة تابعة لكلاس محدد و يمكن الوصول لها بشكل مباشر منه فقط.

لا يمكن الوصول للدالة الثابتة من خلال كائن تم إنشاؤه من الكلاس، بل فقط من الكلاس نفسه.

عادة ما يتم استخدام الدوال الثابتة لتنظيم الكود، فمثلاً في دروس سابقة تعرفنا الكلاس Math الذي يحتوي على العديد من الدوال التي تستخدم في العمليات الرياضية و الحسابية و تعرفنا أيضاً على الكلاس Array الذي يحتوي على دوال خاصة بالمصفوفات و غيرها.

في هذا الدرس ستتعلم كيفية تعريف دوال ثابتة في الكلاس طرق الوصول إليها خطوة خطوة.

تعريف دالة ثابتة في الكلاس

يمكنك استخدام الكلمة المفتاحية static لتعريف الدالة كدالة ثابتة في الكلاس.

في المثال التالي قمنا بتعريف كلاس يحتوي على دالة ثابتة إسمها calculateSpeed() و التي يمكن استخدامها لحساب السرعة ( distance ).

عند استدعاء هذه الدالة يجب إعطاءها عددين:

  • الأول يمثل المسافة ( distance ).
  • الثاني يمثل الوقت ( time ).

في النهاية، السرعة يتم حسابها من خلال قسمة المسافة على الوقت.

مثال

class Physics {
static calculateSpeed(distance, time) {
return distance/time;
}
}
// و تمرير عددين لها و من ثم طباعة ما سترجعه لنا calculateSpeed() هنا قمنا باستدعاء الدالة
document.write('Speed = ' + Physics.calculateSpeed(210, 3));
class Physics { static calculateSpeed(distance, time) { return distance/time; } } // و تمرير عددين لها و من ثم طباعة ما سترجعه لنا calculateSpeed() هنا قمنا باستدعاء الدالة document.write('Speed = ' + Physics.calculateSpeed(210, 3));
جرب الكود

إستدعاء دالة ثابتة من دالة ثابتة

في حال أردت استدعاء دالة ثابتة من دالة ثابتة أخرى فيجب أن تذكر إسم الكلاس الموجودة فيه حتى و لو كانا موجودتين في الكلاس نفسه.

في المثال التالي قمنا بتعريف كلاس يحتوي على دالة ثابتة إسمها calculateSpeed() مهمتها حساب قيمة السرعة، و دالة ثابتة أخرى مبنية عليها إسمها printSpeed() مهمتها حساب قيمة السرعة و طباعتها.

مثال

class Physics {
// يمكن استخدامها لحساب السرعة calculateSpeed() الدالة
static calculateSpeed(distance, time) {
return distance/time;
}
// يمكن استخدامها لحساب السرعة و طباعة قيمتها printSpeed() الدالة
// عند حساب السرعة calculateSpeed() داخلياً تقوم هذه الدالة باستدعاء الدالة
static printSpeed(distance, time) {
document.write('Speed = ' + Physics.calculateSpeed(distance, time));
}
}
// و تمرير عددين لها printSpeed() هنا قمنا باستدعاء الدالة
Physics.printSpeed(210, 3);
class Physics { // يمكن استخدامها لحساب السرعة calculateSpeed() الدالة static calculateSpeed(distance, time) { return distance/time; } // يمكن استخدامها لحساب السرعة و طباعة قيمتها printSpeed() الدالة // عند حساب السرعة calculateSpeed() داخلياً تقوم هذه الدالة باستدعاء الدالة static printSpeed(distance, time) { document.write('Speed = ' + Physics.calculateSpeed(distance, time)); } } // و تمرير عددين لها printSpeed() هنا قمنا باستدعاء الدالة Physics.printSpeed(210, 3);
جرب الكود

إستدعاء دالة ثابتة في الكونستركتور

في حال أردت استدعاء دالة ثابتة في الكونستركتور فيمكنك الوصول إليها من خلال إسم الكلاس أو من خلال الكونستركتور نفسه.

إذا كانت الدالة الثابتة و الكونستركتور تابعان لذات الكلاس فيمكن الوصول للدالة من الكونستركتور من خلال كتابة this.constructor بدلاً من كتابة إسم الكلاس.

في المثال التالي قمنا بتعريف كلاس يحتوي على كونستركتور و دالة ثابتة.
الدالة الثابتة قمنا باستدعائها في الكونستركتور مما يعني أنه في كل مرة يتم فيها إنشاء كائن من الكلاس فإنها ستتنفذ بشكل تلقائي.

المثال الأول

class Physics {
// فيه demo() هنا قمنا بتعريف الكونستركتور و استدعاء الدالة
constructor() {
Physics.demo();
}
// و التي تعرض جملة عادية عند استدعائها demo() هنا قمنا بتعريف الدالة
static demo() {
document.write('demo() is executed');
}
}
// Physics هنا قمنا بإنشاء كائن من الكلاس
new Physics();
class Physics { // فيه demo() هنا قمنا بتعريف الكونستركتور و استدعاء الدالة constructor() { Physics.demo(); } // و التي تعرض جملة عادية عند استدعائها demo() هنا قمنا بتعريف الدالة static demo() { document.write('demo() is executed'); } } // Physics هنا قمنا بإنشاء كائن من الكلاس new Physics();
جرب الكود

فيما يلي قمنا بإعادة المثال السابق مع استدعاء الدالة demo() في الكونستركتور من خلال الكونستركتور نفسه.

المثال الثاني

class Physics {
// فيه demo() هنا قمنا بتعريف الكونستركتور و استدعاء الدالة
constructor() {
this.constructor.demo();
}
// و التي تعرض جملة عادية عند استدعائها demo() هنا قمنا بتعريف الدالة
static demo() {
document.write('demo() is executed');
}
}
// Physics هنا قمنا بإنشاء كائن من الكلاس
new Physics();
class Physics { // فيه demo() هنا قمنا بتعريف الكونستركتور و استدعاء الدالة constructor() { this.constructor.demo(); } // و التي تعرض جملة عادية عند استدعائها demo() هنا قمنا بتعريف الدالة static demo() { document.write('demo() is executed'); } } // Physics هنا قمنا بإنشاء كائن من الكلاس new Physics();
جرب الكود