CodeGym /جاوا بلاگ /Random-SD /جاوا اسڪوپ
John Squirrels
سطح
San Francisco

جاوا اسڪوپ

گروپ ۾ شايع ٿيل
اسان سڀ ڄاڻون ٿا ته ملڪن جون سرحدون ۽ پنهنجا قانون هوندا آهن. ملڪ جا قانون سرحدن اندر هلندا آهن. ملڪ ۾ پڻ آهن، مثال طور، تنظيمون، جهڙوڪ اسڪول يا عجائب گھر، جن جا پنهنجا مقامي ضابطا آهن. اهي ملڪ جي قانونن جي ڀڃڪڙي نه ڪندا آهن، پر صرف مخصوص تنظيم جي فريم ورڪ اندر هلندا آهن. ساڳيو پروگرامنگ ۾ سچ آهي. تنهنڪري پروگرامنگ ۾، ۽ خاص طور تي جاوا ٻولي ۾، اتي هڪ اصطلاح آهي "اسڪوپ". اهو پروگرام جي علائقن ڏانهن اشارو ڪري ٿو جتي ڪجهه ڊيٽا، جهڙوڪ متغير يا طريقا، ڪم. هن آرٽيڪل ۾، اسان اهو معلوم ڪرڻ وارا آهيون ته جاوا ۾ متغيرن لاءِ ڪهڙا اسڪوپ آهن ۽ انهن کي ڪيئن بيان ڪجي.

جاوا اسڪوپ عام طور تي

متغير ۽ طريقن جي دائري کي الڳ ڪرڻ ڇو ضروري آهي؟ حقيقت اها آهي ته ڪڏهن ڪڏهن پروگرام تمام وڏا هوندا آهن ۽ هڪ يا ٻئي متغير کي ٽريڪ ڪرڻ ڏکيو ٿي سگهي ٿو. ان کان علاوه، وڏن منصوبن ۾، متغيرن جو واضح نالو لازمي آھي ته جيئن اھو واضح ٿئي ته اھي ڇا لاءِ آھن. اسڪوپ خاص طور تي توهان کي پروگرام جي مختلف حصن ۾ ساڳئي نالي سان مختلف متغيرن جي اجازت ڏئي ٿي. اهڙي ڪوڊ کي برقرار رکڻ ۽ پڙهڻ لاء آسان آهي. جاوا اسڪوپ وضاحت ڪري ٿو جتي هڪ خاص متغير يا طريقو ڪنهن پروگرام ۾ رسائي لائق آهي. مختصر طور:
  • ھڪڙي متغير ھڪڙي طريقي سان اعلان ڪيو ويو آھي اعلان جي شروعات کان وٺي طريقي جي آخر تائين (طريقي دائري).
  • ڪوڊ بلاڪ ۾ اعلان ڪيل هڪ متغير موجود آهي ان ڪوڊ بلاڪ جي آخر تائين.
  • متغير جيڪي طريقا دليل آهن، طريقي جي آخر تائين موجود آهن.
  • ڪلاس/آبجیکٹ متغيرات موجود آهن جن جي زندگيءَ جي وقت تائين. انهن جي نمائش کي خاص رسائي جي تبديلين جي ذريعي منظم ڪيو ويندو آهي.
  • جامد ڪلاس متغير موجود آهن هر وقت پروگرام هلي رهيو آهي. انهن جي نمائش پڻ طئي ڪئي وئي آهي رسائي جي تبديلين جي ذريعي.

طريقي جي سطح جو دائرو

ڪنهن به variable جو هڪ طريقو ۾ اعلان ڪيو ويو آهي، جنهن ۾ دلائل شامل آهن، انهي طريقي جي ٻاهران رسائي لائق نه آهي. سڀني متغيرن جو اعلان ڪيو ويو آهي اندر جي طريقن جي انهن جي اعلان جي شروعات کان وٺي طريقي جي آخر تائين. هتي طريقو متغير گنجائش جو هڪ مثال آهي:

public class JScopeTest1 {


   public static void main(String[] args) {

       System.out.println(myMethod(5));
       System.out.println(myMethod(17));

   }
   public static int  myMethod(int arg) {
       int secondArg = 100; //local method variable
       return secondArg + arg;
   }
}
هتي اسان وٽ آهي secondArg ، هڪ مقامي متغير يا طريقو دليل. اسان هي متغير استعمال نٿا ڪري سگھون ٻاهر myMethod طريقي سان يا ان کان اڳ اعلان ڪيو ويو. جيڪڏهن هڪ متغير هڪ فنڪشن دليل آهي، پوء اهو هن طريقي جي سڄي جسم ۾ نظر اچي ٿو. مٿين مثال ۾ اسان کي ٻه اهڙا دليل مليا آهن: arg in myMethod ۽ args in main method.

ڪلاس ليول جو دائرو

ڪلاس-ليول اسڪوپ (Instance Variables) - ڪلاس ۾ اعلان ڪيل ڪو به متغير ان طبقي جي سڀني طريقن لاءِ موجود آهي. ان جي رسائي موڊيفائر (يعني عوامي يا پرائيويٽ) تي منحصر ڪري، ان کي ڪڏهن ڪڏهن ڪلاس کان ٻاهر رسائي سگهجي ٿو. تنهن ڪري جيڪڏهن هڪ متغير هڪ طبقاتي متغير آهي، ته پوء اهو هڪ مخصوص اعتراض سان پابند آهي ۽ موجود آهي جيستائين هن طبقي جو ڪو اعتراض آهي. جيڪڏهن ڪو اعتراض نه آهي، ته متغير جي ڪا به ڪاپي ناهي. متغير طبقن جي سڀني طريقن مان نظر اچي ٿو، قطع نظر ته اهي ان کان اڳ يا بعد ۾ اعلان ڪيا ويا آهن. هر شئي جو پنهنجو متغير آهي ٻين شين کان آزاد. جامد طريقن کان متغير تائين رسائي ممڪن ناهي.

ڪوڊ مثال


public class Student {
   
//class level variables
   public String surname;
   String name;
   String secondName;
   private Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
Surname , name , secondName ۽ جنم ڏينهن مثال متغير آهن.

بلاڪ اسڪوپ

جيڪڏهن هڪ متغير ڪوڊ جي ڪجهه بلاڪ ۾ بيان ڪيو ويو آهي، پوء اهو ڪوڊ جي بلاڪ جي آخر تائين موجود آهي. عام طور تي، اهڙا variables موجود آهن گھڙيل braces جي وچ ۾ جنهن ۾ اهي بيان ڪيا ويا آهن. گهڻو ڪري بلاڪ اسڪوپ هڪ لوپ متغير ٿي سگهي ٿو. هڪ متغير جيڪو لوپ لاءِ حالت ۾ قرار ڏنو ويو آهي اهو لوپ کان ٻاهر دستياب ناهي، جيستائين توهان ان کي اڳ ۾ بيان نه ڪيو.

public class JScopeTest2 {
   public static void main(String[] args) {
       for (int i = 0; i < 10; i++) {
           int sum = 0;
           sum = sum + i;
       }
      
       int sum = 1;
       System.out.println(sum);
   }
}
ٻئي پهريون sum ۽ i variables لوپ جي اندر اعلان ڪيا ويا آهن ۽ هن لوپ کان ٻاهر موجود نه آهن. جڏهن ته ٻئي رقم کي لوپ کان ٻاهر قرار ڏنو ويو، تنهنڪري هي خاص متغير ڇپجڻ وارو آهي.

جامد متغير

جيڪڏهن هڪ متغير کي جامد قرار ڏنو ويو آهي (جيڪو جامد لفظ سان نشان لڳل آهي)، پوء اهو موجود آهي جيستائين ان جو طبقو موجود آهي. عام طور تي، JVM پهرين استعمال تي ميموري ۾ هڪ ڪلاس لوڊ ڪري ٿو، جڏهن جامد متغير شروع ڪيا ويا آهن.

import java.util.Date;

public class Student {
   public static int today = 2022;
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

 
   public static void main(String[] args) {
       System.out.println(today);
   }

}
static today variable استعمال ڪرڻ لاءِ توهان کي شاگرد طبقي جو نئون مثال نه ٺاهڻ گهرجي . هتي ”2022“ ڇپبو.

رسائي تبديل ڪندڙ

جاوا وٽ 4 رسائي موڊيفائرز آھن طريقن يا متغير تائين رسائي کي محدود ڪرڻ لاءِ. توھان انھن کي استعمال ڪري سگھوٿا ڪلاس اندر، نه اندر جا طريقا.
  • پرائيويٽ سڀ کان وڌيڪ پابنديون تبديل ڪندڙ آهي. اهو ڪلاس تائين طريقن ۽ متغيرن تائين رسائي کي محدود ڪري ٿو جنهن کي انهن جو اعلان ڪيو ويو آهي. جيڪڏهن ڪلاس کان ٻاهر ڪجهه طريقا يا متغير استعمال ڪرڻ جي ڪا ضرورت ناهي، نجي استعمال ڪريو. جاوا ۾ ڪلاس متغير عام طور تي خانگي آهن.

  • جيڪڏهن ڪو رسائي موڊيفائر بيان نه ڪيو ويو آهي، طريقو يا متغير ڊفالٽ تبديل ڪندڙ کي قبول ڪندو . ڊفالٽ صرف موجوده پيڪيج مان رسائي جي اجازت ڏئي ٿو.

  • محفوظ ٿيل ترميمي صرف موجوده پيڪيج جي اندر مان هڪ طريقي يا متغير تائين رسائي جي اجازت ڏئي ٿو، جيستائين اهو پيڪيج کان ٻاهر ٻارن جي طبقي جي ذريعي رسائي نه آهي.

  • عوام گهٽ ۾ گهٽ پابندي مڙهڻ وارو آهي. اهو توهان کي رسائي جي اجازت ڏئي ٿو هڪ ڪلاس، طريقو يا متغير نه صرف ان طبقي مان جنهن کي اهي اعلان ڪيا ويا آهن، پر ٻاهران پڻ. هي تبديل ڪندڙ واقعي اڪثر استعمال ڪيو ويندو آهي.

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION