JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ آپريٽر جو مثال

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

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

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
ڇا توهان سوچيو ٿا ته ڪنسول ڏانهن آئوٽ ٿيندو؟ خير، اهو هتي واضح آهي :) اعتراض хهڪ Integer آهي، تنهنڪري نتيجو صحيح ٿيندو . ڪنسول آئوٽ پٽ: صحيح اچو ته چيڪ ڪرڻ جي ڪوشش ڪريون ته اهو تعلق رکي ٿو، مثال طور، اسٽرنگ سان:
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

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

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
اسان اڳ ۾ ئي ڄاڻون ٿا ته مثال ڪيئن برتاءُ ڪري ٿو جڏهن اسان چيڪ ڪريون ٿا ته ڇا ڪا شئي عام حالت ۾ ڪنهن طبقي سان تعلق رکي ٿي، پر ڇا ٿيندو جيڪڏهن اسان هتي والدين-ٻار جو تعلق شامل ڪريون؟ انسٽنس آف آپريٽر ڪيئن ڪم ڪندو آهي - 2 مثال طور، توهان ڇا سوچيو ته هيٺ ڏنل چيڪ پيدا ڪندو:
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);

   }
}
آئوٽ پُٽ: سچو غلط اهو بنيادي سوال جنهن جو جواب ڏيڻ جي ضرورت آهي اهو آهي ته مثال طور ”طبقات جي بنياد تي ٺاهيل شئي“ جي تصور کي ڪيئن سمجھايو ويندو آهي؟ نتيجي طور، اسان اهو حاصل ڪيو Сat instanceof Animal == true، پر هڪ اهڙي نموني سان غلطي ڳولي سگهي ٿو. هي اعتراض Catڪلاس جي بنياد تي ڇو ٺاهيو ويو آهي Animal؟ ڇا اهو صرف پنهنجي طبقي جي بنياد تي نه ٺاهيو ويو آهي؟ جواب بلڪل سادو آهي، ۽ توهان شايد اڳ ۾ ئي ان کي ڪڍي ڇڏيو آهي. اهو ترتيب ياد رکو جنهن ۾ تعمير ڪندڙن کي سڏيو وڃي ٿو ۽ متغيرن کي شروعات ڪئي وئي آهي جڏهن هڪ اعتراض ٺاهي. اسان اڳ ۾ ئي هن موضوع کي ڪلاس تعمير ڪندڙ جي مضمون ۾ شامل ڪيو آهي . هتي ان ليڪچر مان هڪ مثال آهي:
public class Animal {

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

   public static int animalCount = 7700000;

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

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

class Cat extends Animal {

   String tail = "The initial value of tail in the Cat class";

   static int catsCount = 37;

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

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
۽ جيڪڏھن توھان ان کي IDE ۾ ھلايو، ڪنسول آئوٽ پُٽ ھن طرح نظر ايندو: بنيادي ڪلاس Animal جو ٺاھيندڙ ھلندو آھي. ڇا جانورن جي ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آھن؟ جامد متغير جي موجوده قيمت animalCount = 7700000 دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾ دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت بنيادي جانورن جي طبقي جو ٺاھيندڙ پنهنجو ڪم مڪمل ڪيو! دماغ جي موجوده قيمت = دماغ جي موجوده قيمت دل = دل ڪيٽ ڪلاس جي ڪنسٽرڪٽر ڪم ڪرڻ شروع ڪيو آهي (جانور جي تعمير ڪندڙ اڳ ۾ ئي ڪم ڪيو ويو آهي) جامد متغير جي موجوده قيمت catsCount = 37 دم جي موجوده قيمت = دم جي شروعاتي قيمت Cat class Current value of tail = دم ڇا توھان کي ھاڻي ياد آھي؟ :) بنيادي ڪلاس تعمير ڪندڙ، جيڪڏهن ڪو هڪ آهي، هميشه هميشه سڏيو ويندو آهي پهريون ڀيرو جڏهن ڪنهن به اعتراض کي ٺاهيو. Instanceof هن اصول تي عمل ڪري ٿو جڏهن اهو طئي ڪرڻ جي ڪوشش ڪري ٿو ته ڇا هڪ اعتراض Аڪنهن طبقي مان ٺاهيو ويو آهي Б. جيڪڏهن بيس ڪلاس ڪنسٽرڪٽر چئبو ته پوءِ ان ۾ ڪو شڪ نه ٿو ٿي سگهي. ٻئي چيڪ سان، هر شيء آسان آهي:
System.out.println(cat instanceof MaineCoon);
ٺاھڻ وقت ٺاھيندڙ MaineCoonکي نه سڏيو ويو Cat، جيڪو منطقي آھي. سڀ کان پوء، MaineCoonهو هڪ اولاد آهي Cat، نه هڪ ابن ڏاڏن. پر Catاھو ھڪڙو نمونو نه آھي. چڱو، اهو صاف لڳي ٿو. ڇا ٿيندو جيڪڏهن اسان ائين ڪندا آهيون:
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، ۽ اسان ان کي قسم جو هڪ اعتراض لڳايو آهي MaineCoon. رستي ۾، اهو ڪم ڇو ٿو ڪري؟ ڇا اهو ڪرڻ ممڪن آهي؟ ڪري. سڀ کان پوء، ڪو به Maine Coon هڪ ٻلي آهي. جيڪڏهن اهو مڪمل طور تي واضح نه آهي، مثال طور ياد ڪريو ابتدائي قسم جي واڌ سان:
public class Main {

   public static void main(String[] args) {

       long x = 1024;

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