CodeGym /جاوا بلاگ /Random-UR /جاوا اس مطلوبہ الفاظ
John Squirrels
سطح
San Francisco

جاوا اس مطلوبہ الفاظ

گروپ میں شائع ہوا۔
CodeGym پر، طلباء کو پہلے اسباق سے لفظی طور پر جاوا سے متعارف کرایا جاتا ہے۔ وقت گزرنے کے ساتھ اس کا مفہوم واضح ہو جاتا ہے۔ لیکن پیچھے مڑ کر دیکھا جائے تو بہت سے لوگ شاید اپنے آپ کو تسلیم کرتے ہیں کہ ایک طویل عرصے تک وہ اس کلیدی لفظ کے زین کو نہیں سمجھ سکے۔ یہ مضمون اس کلیدی لفظ کے رازوں سے پردہ اٹھائے گا جو کہ ابھی تک ایسا کرنے میں کامیاب نہیں ہوا ہے... میرے پاس آپ کو Schildt کا Java حوالہ ملا ہے ، پھر صفحہ 171 پر آپ دیکھ سکتے ہیں کہ یہ کلیدی لفظ اس چیز کا حوالہ دینے کے لئے ایک طریقہ کی ضرورت ہے جس نے اسے کہا ہے۔ ہم اس کے ساتھ سبق ختم کر سکتے ہیں۔ لیکن ہمیں تفصیلات کی ضرورت ہے۔ ایک اصول کے طور پر، آپ کو اسے دو صورتوں میں استعمال کرنے کی ضرورت ہے:
  1. جب ایک مثال متغیر اور طریقہ / کنسٹرکٹر متغیر کا ایک ہی نام ہوتا ہے۔
  2. جب آپ کو کسی دوسرے قسم کے کنسٹرکٹر سے کسی مخصوص قسم کے کنسٹرکٹر (مثال کے طور پر ڈیفالٹ کنسٹرکٹر یا پیرامیٹرائزڈ کنسٹرکٹر) کو کال کرنے کی ضرورت ہو۔ اسے ایک واضح کنسٹرکٹر کال بھی کہا جاتا ہے۔
اور یہ اس کے بارے میں ہے - صرف دو صورتیں ہیں جہاں یہ خوفناک کلیدی لفظ استعمال کیا گیا ہے۔ اب ان دو صورتوں کو مثالوں میں دیکھتے ہیں۔

مثال 1: ایک مثال متغیر اور طریقہ متغیر کا ایک ہی نام ہے۔

فرض کریں کہ ہمارے پاس ایک ہیومن کلاس ہے جو نام کی فیلڈ کی وضاحت کرتی ہے: آئیے نام کے متغیر کے لیے ایک سیٹر بنائیں (سیٹر مکمل طور پر فعال ہے — یہاں کوئی کیچ نہیں ہے):

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
نوٹ کریں کہ ہم String newName کو setName setter طریقہ میں منتقل کرتے ہیں ہم نے ایک نئے متغیر کا اعلان کیا ہے اور ہم جو چاہیں اس کا نام رکھ سکتے ہیں کیونکہ یہ صرف گھوبگھرالی منحنی خطوط وحدانی ({}) کے اندر ہی نظر آئے گا جو setName طریقہ کو گھیرے ہوئے ہیں۔ نوٹ کریں کہ سیٹر کی ایک لائن ہے:

name = newName;
یہاں ہم نے ایک نیا متغیر متعارف کرایا ہے جسے newName کہتے ہیں اور اسے آبجیکٹ کے موجودہ نام کے متغیر کو تفویض کیا ہے۔ بہت سے پروگرامرز کو ایک نئے نام کے ساتھ متغیر متعارف کروانا عجیب لگ سکتا ہے جب بالآخر ہم ایک ہی چیز کے بارے میں بات کر رہے ہوں۔ یعنی، ہم انسانی کلاس میں نام فیلڈ کے بارے میں بات کر رہے ہیں۔ اسی لیے جاوا کے تخلیق کاروں نے ایک ہی متغیر نام کو آسانی سے استعمال کرنے کا طریقہ سوچا۔ دوسرے لفظوں میں، ایک ہی چیز کو ظاہر کرنے والے متغیر کے دو نام کیوں ہیں۔ دوسرے الفاظ میں، ہم کچھ ایسا کرنا چاہتے ہیں:

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
لیکن یہاں ہمیں ایک مسئلہ درپیش ہے ۔ اب ہمارے پاس ایک ہی نام کے دو متغیر ہیں۔ ایک اسٹرنگ کا نام ہیومن کلاس سے تعلق رکھتا ہے ، جبکہ دوسرا اسٹرنگ نام اس کے سیٹ نام کے طریقہ کار سے تعلق رکھتا ہے۔ نتیجے کے طور پر، JVM کو معلوم نہیں ہوگا کہ جب آپ سیٹر میں درج ذیل لائن لکھتے ہیں تو آپ کس متغیر کا حوالہ دے رہے ہیں:

name = name;
جاوا فرض کرتا ہے کہ آپ کا مطلب قریب ترین نام متغیر ہے، یعنی setName طریقہ سے ایک : یہ مطلوبہ لفظ (مثالوں کے ساتھ) - 3تو پتہ چلتا ہے کہ آپ صرف طریقہ کا نام متغیر خود کو تفویض کر رہے ہیں۔ جس کا یقیناً کوئی مطلب نہیں۔ لہٰذا، زبان کو سیٹ نام کے طریقہ کار میں ہیومن کلاس کے نام کے متغیر کو نام کے متغیر سے الگ کرنے کے لیے کسی طریقے کی ضرورت تھی۔ یہ مسئلہ اس کلیدی لفظ کو متعارف کروا کر حل کیا گیا تھا ، جو اس صورت میں اس بات کی نشاندہی کرتا ہے کہ آپ انسانی طبقے کی مثال سے وابستہ متغیر کا حوالہ دینا چاہتے ہیں ، نہ کہ طریقہ کار میں متغیر کا: دوسرے لفظوں میں، اس سے مراد کالنگ آبجیکٹ ہے، جیسا کہ ہم نے مضمون کے شروع میں ذکر کیا ہے۔ نتیجے کے طور پر، سیٹ نام کا طریقہ تخلیق کردہ آبجیکٹ پر شخص کا نام سیٹ کرتا ہے۔ اس کلیدی لفظ کو استعمال کیے بغیر پروگرام کا کوڈ ذیل میں ہے ۔ کوڈ ایک ہیومن آبجیکٹ بناتا ہے اور اسے ایک نام تفویض کرتا ہے: اور یہاں اس کلیدی لفظ کے ساتھ کوڈ ہے : یہ کلیدی لفظ (مثال کے ساتھ) - 4یہ مطلوبہ لفظ (مثال کے ساتھ) - 5

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        human1.print();
    }
}
class Human {
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print() {
        System.out.println(name);
    }
}
اس طرح، یہ ہمیں ایک ہی چیز کو ظاہر کرنے کے لیے نئے متغیرات کو متعارف کرانے سے گریز کرنے دیتا ہے، جس سے کوڈ کو صاف ستھرا اور اضافی متغیرات سے کم بے ترتیبی ہوتی ہے۔

مثال 2: اسے ایک واضح کنسٹرکٹر کال کے لیے استعمال کرنا

ایک کنسٹرکٹر کو دوسرے سے کال کرنا اس وقت کارآمد ثابت ہوسکتا ہے جب آپ کے پاس (عجیب طور پر کافی) متعدد کنسٹرکٹرز ہوں اور آپ نئے کنسٹرکٹر سے نہیں چاہتے کہ پہلے کسی مختلف کنسٹرکٹر میں لکھے گئے ابتدائی کوڈ کو ڈپلیکیٹ کرے۔ الجھن میں؟ یہ اتنا خوفناک نہیں ہے جتنا لگتا ہے۔ نیچے دیے گئے کوڈ کو دیکھیں۔ انسانی طبقے کے لیے اس کے دو کنسٹرکٹرز ہیں :

class Human {
    int age;
    int weight;
    int height;

    Human(int age, int weight) {
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
یہاں ہم نے پہلے دو پیرامیٹرز کے ساتھ کنسٹرکٹر فراہم کیا ہے: int age اور int weight ۔ فرض کریں کہ اس میں کوڈ کی دو لائنیں ہیں:

this.age = age;
this.weight = weight;
بعد میں ہم تین پیرامیٹرز کے ساتھ ایک اور کنسٹرکٹر کو شامل کرنے کا فیصلہ کرتے ہیں، موجودہ عمر اور وزن کے پیرامیٹرز میں اونچائی کا اضافہ کرتے ہیں۔ آپ نیا کنسٹرکٹر اس طرح لکھ سکتے ہیں:

this.age = age;
this.weight = weight;
this.height = height;
لیکن اس کنسٹرکٹر میں موجودہ کوڈ کو دہرانے کے بجائے، آپ اس کلیدی لفظ کو دو پیرامیٹرز کے ساتھ کنسٹرکٹر کو واضح طور پر کال کرنے کے لیے استعمال کر سکتے ہیں:

this(age, weight);
// and then initialize the missing variable:
this.height = height;
یہ ایسا ہی ہے جیسے ہم تین پیرامیٹر کنسٹرکٹر سے کہہ رہے ہیں:
  • اس دوسرے کنسٹرکٹر کو کال کریں جس کے دو پیرامیٹرز ہیں۔
  • اور پھر ایک اور متغیر شامل کریں۔
بس اتنا ہی =)۔ آخر میں، ہم نوٹ کرتے ہیں کہ جاوا میں یہ کلیدی لفظ صرف طریقوں اور تعمیر کنندگان میں استعمال ہوتا ہے۔ لیکن یہ تمام غیر جامد طریقوں کو واضح طور پر منتقل کیا جاتا ہے (اسی وجہ سے اسے اکثر مضمر پیرامیٹر کہا جاتا ہے) اور اس چیز کا حوالہ دینے کے لیے استعمال کیا جا سکتا ہے جسے طریقہ کہا جاتا ہے۔ اس مطلوبہ الفاظ سے مت ڈریں، کیونکہ یہ خوفناک نہیں ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION