القائمة الرئيسية

الصفحات

دور this في java

تعرّف على الأمر this الأكثر استخدامًا في البرمجة

الأمر this من أكثر الأوامر استخدامًا في البرمجة، ويستعمل بكثرة في لغة Java، وكذلك في PHP وJavaScript ولغات أخرى.

إذا كنت تتابع دورة لتعلم لغة Java، فقد ترى الأمر this كثيرًا دون وقد تجده معقد الفهم في اول مرة . لذلك لا تقلق، فهذا أمر طبيعي، لأن معظم المبتدئين لا يفهمون دوره الحقيقي إلا بعد الممارسة وكتابة الكثير من الأكواد وإنشاء مشاريع عملية.

لفهم this جيدًا، يجب أولًا أن تعرف ثلاثة مفاهيم أساسية في البرمجة:

  1. المتغيرات (Variables)، سواء العامة أو المحلية.
  2. الدوال (Functions أو Methods).
  3. البارامترات (Parameters) التي تُمرَّر إلى الدوال.

بعد فهم هذه المفاهيم ستعرف بسهولة لماذا نستخدم this.

المتغيرات (Variables)

المتغير هو مكان لتخزين قيمة معينة، مثل نص أو رقم أو أي بيانات أخرى.

فمثلًا إذا أردنا تخزين اسم البرنامج، نكتب:

name = "قدرات ستوديو";

بعد ذلك، كلما احتجنا إلى اسم البرنامج نستخدم المتغير name بدلًا من كتابة الاسم في كل مكان.

لماذا نستخدم المتغيرات؟

لو كتبت اسم البرنامج في مئة مكان، ثم أردت تغييره، فسيتوجب عليك تعديل المئة مكان كلها.

أما عند استخدام متغير، فستغيّر القيمة مرة واحدة فقط:

name = "الاسم الجديد";

وسيتغير الاسم في جميع أماكن البرنامج تلقائيًا.

كما أن المتغيرات تجعل الكود أكثر تنظيمًا وأسهل في القراءة والتعديل.

المتغيرات العامة والمحلية

يوجد نوعان أساسيان من المتغيرات:

المتغير العام (Global أو Class Variable)

يمكن استخدامه في جميع دوال البرنامج.

مثال:

String var1 = "أهلاً";

هذا المتغير يمكن لأي دالة الوصول إليه.

المتغير المحلي (Local Variable)

يُعرَّف داخل دالة معينة، ولا يمكن استخدامه خارجها.

مثال:

void hello() {
    String var2 = "مرحبًا";
    System.out.println(var2);
}

المتغير var2 موجود فقط داخل الدالة hello()، وعند انتهاء تنفيذ الدالة يختفي.

لماذا نستخدم المتغيرات؟

المتغيرات من أهم عناصر البرمجة، لأنها تخزن البيانات التي يحتاجها البرنامج.

مثال: إذا أردنا معرفة إصدار أندرويد الخاص بكل هاتف:

String ver = androidVersion;

كل مستخدم سيحصل على إصدار جهازه الخاص.

ومثال آخر في برنامج آلة حاسبة:

int x = 2;
int y = 3;

System.out.println(x + y);

ستكون النتيجة:

5

وفي البرامج الحقيقية تأتي القيم من المستخدم، ثم تُخزَّن داخل المتغيرات قبل إجراء العمليات عليها.

الدوال (Functions)

الدالة هي مجموعة من الأوامر تُنفَّذ عند الحاجة، مثل الضغط على زر أو استدعائها من مكان آخر في البرنامج.

مثال:

void hello() {
    String var = "مرحبًا";
    System.out.println(var);
}

وعند استدعائها:

hello();

ستظهر كلمة:

مرحبًا

مثال يوضح الفرق بين المتغير العام والمحلي

String var1 = "أهلاً";

void hello() {
    String var2 = "مرحبًا";
    System.out.println(var1);
}

في هذا المثال:

  • var1 متغير عام ويمكن استخدامه في جميع الدوال.
  • var2 متغير محلي ولا يمكن استخدامه إلا داخل الدالة hello().

ما هي البارامترات (Parameters)؟

البارامترات هي متغيرات نستقبل بها البيانات عند استدعاء الدالة.

مثال:

void printName(String name) {
    System.out.println(name);
}

وعند استدعائها:

printName("محمد");

ستطبع:

محمد

ولو استدعيناها هكذا:

printName("أحمد");

فستطبع:

أحمد

أي أن المتغير name يأخذ القيمة التي نرسلها للدالة.


الآن نصل إلى الأمر this

لنفترض أننا نريد إنشاء كائن يمثل شخصًا، ويحتوي على الاسم والعمر.

class Person {

    String name=iyad;
    int age=13;

    Person(String name, int age) {

    }

Person(ayman ; 7) ; }

لاحظ أن لدينا متغيرين داخل الكلاس واعطيناهم قيم بمجرد تنفيد الكلاس اعطينا اسم iyad بعمر 13 :

String name=iyad;
    int age=13;

ولدينا أيضًا بارامتران داخل المنشئ بنفس الاسمين للمتغيرين وهنا تاتي القيم عند استدعاء الدالة ولو لاحظت استدعيتها واعطيتها قيم باسم ayman بعمر 7 :

String name
int age

إذا كتبنا داخل الدالة هكذا فاي متغير يتم تخزينه هل المتغير name و age الذين داخل الكلاس او المتغيران الذين داخل الدالة Person والذين لهم نفس الاسم name و age :

لو كتبنا داخل الدابة هكذا فلن يعمل الكود كما نتوقع:

name = name;
age = age;

كما قلنا لن يعمل الكود كما نتوقع، لأن Java ستعتبر أن الطرفين يشيران إلى البارامتر الموجودة داخل الدالة، ولن يتم تعديل متغيرات الكلاس .

هنا يأتي دور this.

نكتب:

this.name = name;
this.age = age;

ومعنى ذلك:

  • this.name يقصد به المتغير الموجود داخل الكلاس.
  • name يقصد به البارامتر الذي استقبلته الدالة.

أي أن السطر:

this.name = name;

يعني:

خزّن قيمة البارامتر name داخل متغير الكلاس name.

وكذلك:

this.age = age;

أي خزّن قيمة البارامتر age داخل متغير الكلاس age.


لماذا نستخدم this؟

نستخدم this للإشارة إلى الكائن الحالي، وللتمييز بين متغيرات الكلاس والبارامترات عندما يكون لهما نفس الاسم.

بدون this لن يستطيع المترجم معرفة أي متغير تقصد.

ولهذا ستجد أن معظم المبرمجين يكتبون المنشئات بهذا الشكل:


class Person {

 String name=iyad; 
 int age=13; 
 
 Person(String name, int age) { 
 this.name = name; 
 this.age = age; }
 
 Person(ayman,7);
 
  } 

اذا بهده الطريقة سيتم تخزين الاسم ayman بعمر 7 بدل القيم الافتراضية الاولى وسيتستخدم هذه القيم في اي مكان استدعيت المتغير nme و age.

وهذا هو الاستخدام الأكثر شيوعًا للأمر this، لكنه ليس الاستخدام الوحيد، إذ يمكن أيضًا استخدامه لاستدعاء دالة أخرى داخل نفس الكلاس، أو لتمرير الكائن الحالي إلى دالة أو منشئ آخر.


أنت الان في اول موضوع
هل اعجبك الموضوع :

تعليقات