ممكن شرح this في الجافا ؟

السلام عليكم و رحمة الله و بركاته

خلال تعلمي لدورة عبد الله عيد لجافا

لم أفهم درس this كلها

يعني لم افهم ما فائدتها كليا

ممكن شرح لماهي فائدتها و كيفية استعمالها

و لأي شيئ تصلح له ؟

و شكرا

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

11
eng.fouad أضف ردا

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

كلامك غير صحيح هنا

DOOR.var

OR

this.var

فالأولى تستخدم مع الأعضاء الساكنة

كلام سليم

ولكن لم يكن مقصدي هو اسناد قيمه في الاولى (DOOR.var ) ولكن وضعتها حتى يتضح المفهوم العام لكيفية عمل الكلاس