CodeGym /جاوا بلاگ /Random-SD /جاوا مثال آپريٽر
John Squirrels
سطح
San Francisco

جاوا مثال آپريٽر

گروپ ۾ شايع ٿيل
سلام اڄ اسان مثال طور آپريٽر جي باري ۾ ڳالهائينداسين ، ان جي مثالن تي غور ڪنداسين ته اهو ڪيئن استعمال ٿئي ٿو، ۽ اهو ڪيئن ڪم ڪري ٿو ان جي ڪجهه پهلوئن تي رابطو ڪريو:) توهان اڳ ۾ ئي هن آپريٽر کي CodeGym جي شروعاتي سطحن تي ڏٺو آهي. توهان کي ياد آهي ڇو اسان کي ان جي ضرورت آهي؟ جيڪڏهن نه، پريشان ناهي. اچو ته گڏجي ياد ڪريون. مثال طور آپريٽر کي چيڪ ڪرڻ جي ضرورت آهي ته ڇا هڪ X متغير طرفان حوالو ڪيل اعتراض ڪجهه Y ڪلاس جي بنياد تي ٺاهيو ويو آهي . اهو سادو آواز آهي. اسان هن موضوع ڏانهن ڇو موٽي آيا آهيون؟ سڀ کان پهريان، ڇاڪاڻ ته هاڻي توهان جاوا جي وراثت واري ميڪانيزم ۽ OOP جي ٻين اصولن کان چڱي طرح واقف آهيو. آپريٽر جو مثال هاڻي وڌيڪ واضح ٿي ويندو ۽ اسان وڌيڪ ترقي يافته مثالن تي نظر ڪنداسين ته اهو ڪيئن استعمال ٿئي ٿو. اچو ته هلون! آپريٽر جو مثال ڪيئن ڪم ڪندو آهي - 1توهان کي شايد ياد هوندو ته مثال طور آپريٽر واپس اچي ٿو سچو جيڪڏهن چيڪ صحيح طور تي اندازو لڳائي ٿو، يا غلط آهي جيڪڏهن اظهار غلط آهي. ان جي مطابق، اهو عام طور تي سڀني قسمن جي مشروط اظهار ۾ ٿئي ٿو ( if…else ). اچو ته ڪجهه آسان مثالن سان شروع ڪريون:

public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
توهان ڇا سوچيو ته ڪنسول تي ڏيکاري ويندي؟ خير، اھو ھتي پڌرو آھي. :) x اعتراض ھڪڙو انٽيجر آھي، تنھنڪري نتيجو صحيح ٿيندو . ڪنسول آئوٽ پُٽ: True اچو ته جانچ ڪريون ته ڇا اهو اسٽرنگ آهي :

public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof String); // Error!
   }
}
اسان کي هڪ غلطي ملي آهي. ۽ ڌيان ڏيو: ڪمپلر ڪوڊ کي هلائڻ کان اڳ غلطي پيدا ڪئي! اهو فوري طور تي ڏٺو ويو ته Integer ۽ String خودڪار طريقي سان هڪ ٻئي ۾ تبديل نه ٿي ڪري سگھجي ۽ وراثت سان لاڳاپيل نه آهن. نتيجي طور، هڪ Integer اعتراض پيدا نه ڪيو ويو آهي String جي بنياد تي . اهو آسان آهي ۽ رن ٽائم جي عجيب غلطين کان بچڻ ۾ مدد ڪري ٿو، تنهنڪري مرتب ڪندڙ اسان کي هتي مدد ڪئي :) هاڻي اچو ته انهن مثالن تي غور ڪرڻ جي ڪوشش ڪريون جيڪي وڌيڪ مشڪل آهن. جيئن ته اسان وراثت جو ذڪر ڪيو آهي، اچو ته هيٺ ڏنل ننڍڙي نظام سان ڪم ڪريون طبقن جي:

public class Animal {

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
اسان اڳ ۾ ئي ڄاڻون ٿا ته مثال ڪيئن عمل ڪندو آهي جڏهن اسان چيڪ ڪريون ٿا ته هڪ اعتراض هڪ طبقي جو مثال آهي، پر ڇا ٿيندو جيڪڏهن اسان والدين-ٻار جي رشتي تي غور ڪندا آهيون؟ مثال طور، توهان ڇا سوچيو ته اهي اظهار پيدا ٿيندا:

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();

       System.out.println(cat instanceof Animal);

       System.out.println(cat instanceof MaineCoon);

   }
}
Output: True False بنيادي سوال جنهن جو جواب ڏيڻ جي ضرورت آهي، اهو آهي ته ڪيئن مثال جي تشريح ڪري ٿو 'ڪنهن طبقي جي بنياد تي ٺاهيل اعتراض'؟ ' جانور جي ٻلي مثال ' صحيح طور تي اندازو لڳائي ٿو ، پر يقيني طور تي اسان ان لفظ سان غلطي ڳولي سگهون ٿا. ڇو هڪ ٻلي اعتراض جانورن جي طبقي تي ٻڌل آهي ؟ ڇا اهو صرف پنهنجي طبقي جي بنياد تي نه ٺاهيو ويو آهي؟ جواب ڪافي سادو آهي، ۽ توهان شايد اڳ ۾ ئي سوچيو هوندو. اهو ترتيب ياد رکو جنهن ۾ تعمير ڪندڙن کي سڏيو وڃي ٿو ۽ متغيرن کي شروعات ڪئي وئي آهي جڏهن هڪ اعتراض ٺاهي. اسان اڳ ۾ ئي هن موضوع کي ڪلاس تعمير ڪندڙن بابت مضمون ۾ شامل ڪيو آهي . هتي ان سبق مان هڪ مثال آهي:

public class Animal {

   String brain = "Initial value of brain in the Animal class";
   String heart = "Initial value of heart in the Animal class";

   public static int animalCount = 7700000;

   public Animal(String brain, String heart) {
       System.out.println("Animal base class constructor is running");
       System.out.println("Have the variables of the Animal class already been initialized?");
       System.out.println("Current value of static variable animalCount = " + animalCount);
       System.out.println("Current value of brain in the Animal class = " + this.brain);
       System.out.println("Current value of heart in the Animal class = " + this.heart);
       System.out.println("Have the variables of the Cat class already been initialized?");
       System.out.println("Current value of static variable catCount = " + Cat.catCount);

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor is done!");
       System.out.println("Current value of brain = " + this.brain);
       System.out.println("Current value of heart = " + this.heart);
   }
}

public class Cat extends Animal {

   String tail = "Initial value of tail in the Cat class";

   static int catCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The Cat class constructor has started (The Animal constructor already finished)");
       System.out.println("Current value of static variable catCount = " + catCount);
       System.out.println("Current value of tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value of tail = " + this.tail);
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
۽ جيڪڏهن توهان ان کي IDE ۾ هلائيندا آهيو، ڪنسول آئوٽ پُٽ هن طرح نظر ايندو: Animal base class constructor هلندي آهي ڇا جانورن جي ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آهن؟ جامد متغير جي موجوده قيمت animalCount = 7700000 دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾ دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت اڳ ۾ ئي ٻلي طبقي جا متغير آھن شروعات ڪئي وئي؟ جامد متغير جي موجوده قيمت catCount = 37 جانورن جو بنيادي ڪلاس تعمير ڪندڙ ٿي چڪو آهي! دماغ جي موجوده قيمت = دماغ جي موجوده قيمت دل = دل ٻلي ڪلاس جو تعمير ڪندڙ شروع ٿي چڪو آھي (جانور ٺاھيندڙ اڳ ۾ ئي ختم ٿي چڪو آھي) جامد متغير جي موجوده قيمت catCount = 37 دم جي موجوده قيمت = ٻلي جي ڪلاس ۾ دم جي شروعاتي قيمت tail جي موجوده قيمت = Tail Now ڇا توھان کي ياد آھي؟:) بنيادي ڪلاس جو ٺاھيندڙ، جيڪڏھن ھڪڙو بنيادي ڪلاس آھي، هميشه ھڪڙي شيء کي ٺاھڻ وقت پھريون سڏيو ويندو آھي. مثال طور آپريٽر هن اصول جي رهنمائي ڪري ٿو جڏهن اهو طئي ڪرڻ جي ڪوشش ڪري ٿو ته ڇا هڪ اعتراض بي ڪلاس جي بنياد تي ٺاهيو ويو آهي . جيڪڏهن بيس ڪلاس ڪنسٽرڪٽر چئبو ته پوءِ ان ۾ ڪو شڪ نه ٿو ٿي سگهي. ٻئي چيڪ سان، هر شيء آسان آهي:

System.out.println(cat instanceof MaineCoon);
MaineCoon تعمير ڪندڙ کي نه سڏيو ويو جڏهن ٻلي اعتراض ٺاهي وئي، جيڪا احساس پيدا ڪري ٿي . سڀ کان پوء، MaineCoon ٻلي جو اولاد آهي ، نه هڪ ابا ڏاڏا. ۽ اهو ٻلي لاءِ ٽيمپليٽ ناهي . ٺيڪ، مان سمجهان ٿو ته اسان ان تي واضح آهيون. پر ڇا ٿيندو جيڪڏهن اسان اهو ڪريون؟:

public class Main {

   public static void main(String[] args) {

       Cat cat = new MaineCoon();

       System.out.println(cat instanceof Cat);
       System.out.println(cat instanceof MaineCoon);


   }
}
هيم... هاڻي اهو ڏکيو آهي. اچو ته ان تي ڳالهايون. اسان وٽ هڪ Cat variable آهي جنهن کي اسان هڪ MaineCoon اعتراض لڳايو آهي. رستي ۾، اهو ڪم ڇو ٿو ڪري؟ اسان اهو ڪري سگهون ٿا، صحيح؟ ها اسان ڪري سگھون ڀا. سڀ کان پوء، هر MaineCoon هڪ ٻلي آهي. جيڪڏهن اهو مڪمل طور تي واضح نه آهي، ياد رکو ته مثالي نموني کي وڌائڻ جو مثال:

public class Main {

   public static void main(String[] args) {

       long x = 1024;

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

Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
چيڪ جو مثال ڇا ٿيندو ؟ اسان جي ٻلي variable يا اسان جي MaineCoon اعتراض؟ هن سوال جو جواب اصل ۾ سادو آهي. توهان کي صرف آپريٽر جي تعريف کي ٻيهر پڙهڻ جي ضرورت آهي: مثال طور آپريٽر کي چيڪ ڪرڻ جي ضرورت آهي ته ڇا هڪ اعتراض جو حوالو X variable طرفان ڪجهه Y ڪلاس جي بنياد تي ٺاهيو ويو هو . مثال طور آپريٽر ڪنهن شئي جي اصليت کي جانچي ٿو، متغير قسم جو نه. اهڙيء طرح، هن مثال ۾، اسان جو پروگرام ڏيکاريندو صحيح ٻنهي صورتن ۾: اسان وٽ هڪ MaineCoon اعتراض آهي. ظاهر آهي، اهو ٺاهيو ويو MaineCoon طبقي جي بنياد تي، پر اهو پڻ پيدا ڪيو ويو ٻلي والدين طبقي جي بنياد تي !
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION