السلام عليكم و رحمة الله و بركاته
خلال تعلمي لدورة عبد الله عيد لجافا
لم أفهم درس this كلها
يعني لم افهم ما فائدتها كليا
ممكن شرح لماهي فائدتها و كيفية استعمالها
و لأي شيئ تصلح له ؟
و شكرا
this هي كلمة محجوزة (keyword) تشير للعيّنة الحالية (current instance) من هذا الصنف (class) في عالم الكائنات (Object Oriented).
مقدمة عن عالم الكائنات:
من المعروف أن الـ class ما هو إلى وصف لشيء. وصف للصفات (fields) والأفعال (methods). فمثلاً الصنف Car يحتوي على عدة صفات مثل model - color - topSpeed، ويحتوي على عدة أفعال مثل startEngine - move.
من هذا الصنف يمكن إنشاء عيّنات (instances) باستخدام الكلمة المحجوزة new مع استدعاء دالة البناء (constructor). فمثلاً ننشيء عينةّ يكون نوعها Car وتكون صفاتها مثلاً:
model = 2016
color = white
topSpeed = 240
وعيّنة أخرى من نفس النوع تكون صفاتها مثلاً:
model = 1995
color = black
topSpeed = 200
وبالرغم من أنهما يشتركان في نفس الأفعال، لكن هذه الأفعال تختلف في طريقة أدائها بسبب اختلاف الصفات.
استخدام this:
عندما نستخدم الكلمة this داخل الكود المصدري (source code) للصنف Car، فإنها تشير للعيّنة الحالية من هذا الصنف. بمعنى آخر، لاحظ الكود الآتي:
public int getTopSpeed()
{
return this.topSpeed;
}
عند استدعاء هذه الدالة على العيّنة الأولى سيرجع لنا 240:
Car car1 = new Car(2016, "white", 240);
int topSpeed = car1.getTopSpeed();
بينما سيرجع لنا 200 لو تم استدعاؤها على العيّنة الثانية.
لاحظ بأن استخدام this غير ضروري هنا، بينما هو ضروري في المثال التالي:
public void setTopSpeed(int topSpeed)
{
this.topSpeed = topSpeed;
}
لأنه إذا كان المتغير المحلي (local variable) بنفس اسم أحد الصفات، فإنه "سيطغى" عليه (variable shadowing). والحل هو إضافة this قبل اسم المتغير ليشير للصفة وليس للمتغير المحلي.
طبعاً هناك استخدامات متقدمة، مثل الوصول للمتغيرات والدوال لصنف خارجي (Enclosing Class) من داخل صنف داخلي (Inner Nested Class).
this = تعني اسم الكلاس بإختصار شديد
عندما نكتب كلاس ولنفرض اسمه ( DOOR ) سنقوم بتعريف متغيرات لهذا الكلاس
مثال :
publuc $var;
private $win;
و functions
وعند استدعاء اي من المتغيرات او الدوال لابد لنا من كتابة اسم الكلاس التابع لهذا المتغير اولاً ومن ثم نتبعه بأسم المتغير او الدالة الموجودة داخله
DOOR.var
OR
this.var
التعليقات