CodeGym /جاوا بلاگ /Random-UR /دوکھیباز پروگرامرز کے ذریعہ کی گئی 8 عام غلطیاں
John Squirrels
سطح
San Francisco

دوکھیباز پروگرامرز کے ذریعہ کی گئی 8 عام غلطیاں

گروپ میں شائع ہوا۔
ہائے! آج ہم روکی (اور دیگر) جاوا ڈویلپرز کی طرف سے کی گئی 8 بہت عام غلطیوں کو دیکھیں گے۔ آپ کو ویب پر ایسی بہت سی فہرستیں ملیں گی: ان میں سے بہت سی ایک دوسرے سے ملتی جلتی ہیں۔ جیسا کہ ہم نے اپنی فہرست مرتب کی، ہماری رہنمائی ایک معیار سے ہوئی: چاہے ہم نے اپنی پڑھائی یا ملازمت کے دوران خود سے غلطیاں کی ہوں :) ان کو اہمیت کے لحاظ سے ترتیب نہیں دیا جاتا ہے — وہ آپ کے لیے سمجھنا اور یاد رکھنا بھی اتنا ہی اہم ہے۔
  1. استعمال کرتے ہوئے اشیاء کا موازنہ کرنا == ۔

    == آپریٹر آبجیکٹ حوالہ جات کا موازنہ کرتا ہے ۔

    حوالہ جات میموری میں پتوں کی طرف اشارہ کرتے ہیں۔ اگر وہ مختلف پتوں پر محفوظ ہیں، تو == کا استعمال کرتے ہوئے موازنہ غلط واپس آئے گا ۔

    public class Vehicle {
    
        String model;
        int maxSpeed;
        int yearOfManufacture;
    
        public Car(String model, int maxSpeed, int yearOfManufacture) {
            this.model = model;
            this.maxSpeed = maxSpeed;
            this.yearOfManufacture = yearOfManufacture;
        }
    
        public static void main(String[] args) {
            Car ferrari = new Car("Ferrari 360 Spider", 280, 1996);
            Car ferrariTwin = new Car("Ferrari 360 Spider", 280, 1996);
            System.out.println(ferrari == ferrariTwin);
        }
    }

    اشیاء کا موازنہ کرنے کے لیے، آبجیکٹ کلاس کا ایک خاص طریقہ ہے: equals() ۔ سچ کہوں تو، اس کا ڈیفالٹ نفاذ برا نہیں ہے:

    public boolean equals(Object obj) {
        return (this == obj);
    }

    آبجیکٹ کلاس میں ہی، equals() طریقہ کو دو حوالوں کے موازنہ کے طور پر لاگو کیا جاتا ہے۔ بدلے میں، اشیاء کا درست موازنہ کرنے کے لیے، آپ کو اس طریقہ کار کو ان معیارات کے مطابق دوبارہ متعین کرنے کی ضرورت ہے جو آپ کے مخصوص پروگرام میں آپ کی مخصوص اشیاء کے لیے متعلقہ ہیں۔ مساوات کا معیار آپ پر منحصر ہے۔

    صرف ایک چیز جس کو آپ کو نہیں بھولنا چاہئے وہ ہے Equals() کو مناسب طریقے سے اوور رائیڈ کرنے کے تقاضوں کی فہرست ۔ آپ انہیں انٹرنیٹ پر آسانی سے تلاش کر سکتے ہیں۔

  2. جامد طریقوں میں غیر جامد متغیرات کا استعمال (اور اس کے برعکس)۔

    اگر آپ نے کبھی یہ پیغام دیکھا ہے کہ "غیر جامد متغیر x کا حوالہ جامد سیاق و سباق سے نہیں لیا جا سکتا"، کلب میں خوش آمدید :)

    جامد طریقوں کو غیر جامد (مثال کے طور پر) متغیرات تک رسائی نہیں ہے۔

    یہ سمجھ میں آتا ہے: سب کے بعد، ایک جامد طریقہ کو اس کی کلاس کی کوئی چیز بنائے بغیر کہا جا سکتا ہے، اور تمام فیلڈز کا تعلق مخصوص اشیاء سے ہے۔ اور یہاں وہ تضاد ہے جو غلطی کا سبب بنتا ہے۔

    ویسے، دوسرے راستے پر جانا ٹھیک کام کرتا ہے: آپ جامد متغیرات کو غیر جامد طریقوں میں استعمال کر سکتے ہیں:

    public class Main {
    
        public int x = 10;
    
        public static int staticX = 100;
    
        public static void main(String[] args) {
    
            System.out.println(x); // Compilation error - you can't do this!
        }
    
        public void printX() {
    
            System.out.println(staticX); // But you can do this!
        }
    }

  3. غلط فہمی کہ دلائل کو طریقوں تک کیسے منتقل کیا جاتا ہے: حوالہ یا قدر کے لحاظ سے۔

    اشیاء اور قدیم چیزوں کو دو مختلف طریقوں سے طریقوں میں منتقل کیا جاتا ہے: پہلا، حوالہ کے ذریعے؛ دوسرا، قدر کے لحاظ سے۔

    ابتدائی افراد کو اکثر اس تصور کو سمجھنا مشکل ہوتا ہے۔ نتیجے کے طور پر، ان کا کوڈ غیر متوقع طور پر برتاؤ کرتا ہے:

    public class Main {
    
        public static void main(String[] args) {
    
            int x = 7;
            incrementNumber(x);
            System.out.println(x);
    
            Cat cat = new Cat(7);
            catLevelUp(cat);
            System.out.println(cat.getAge());
    
        }
    
        public static void catLevelUp(Cat cat) {
    
            cat.setAge(cat.getAge()+1);
        }
    
        public static void incrementNumber(int x) {
            x++;
        }
    }

    اگر آپ بالکل نہیں جانتے کہ کون سی تعداد بڑھے گی اور کون سی نہیں ہوگی (سادہ پرانا نمبر یا بلی کی عمر)، تو اس موضوع پر ہمارا سبق دوبارہ پڑھیں ۔

  4. کوڈنگ کے قوانین کو نظر انداز کرنا۔

    اس کا اطلاق نہ صرف بعض "تکنیکی" اصولوں کی تعمیل پر ہوتا ہے، بلکہ ناموں کے نام کی دنیاوی روایات پر بھی لاگو ہوتا ہے۔

    یہ تمام اصول (متغیرات کو کیسے نام دیں، طریقہ کے نام کیسے لکھیں) ایک وجہ سے ایجاد ہوئے تھے۔ وہ واقعی کوڈ کی پڑھنے کی اہلیت کو متاثر کرتے ہیں۔

    بہر حال، کوڈ ہمیشہ آپ کا نہیں ہوگا۔ آپ کو اپنی کمپنی میں کسی مختلف پروجیکٹ میں منتقل کیا جا سکتا ہے۔ آپ کے ساتھی کارکن جو آپ کے کوڈ کے وارث ہوتے ہیں ظاہر ہے کہ جب وہ کچھ ایسا دیکھیں گے تو خوش نہیں ہوں گے:

    public class Cat {
    
        private int S_O_M_E_T_H_I_N_G = 7;
        public String striiiiiiiiiiiiiing;
        protected double I_HAVE_NO_IDEA_WHAT_THIS_IS = 3.14;
        boolean random = Math.random() > 0.5;
    
    }

    ہو سکتا ہے کہ آپ کے کوڈ کی عمدہ کارکردگی ہو، لیکن اگر یہ پڑھنا اور سمجھنا ناممکن ہے کہ یہ اصل میں کیسے کام کرتا ہے، تو افسوس، اس کی کوئی قیمت نہیں ہے۔

    اگر آپ کوڈنگ کے معیارات پر قائم رہتے ہیں، پھر بھی اگر آپ کا کوڈ مثالی نہیں ہے، تو کم از کم آپ کے زیادہ تجربہ کار ساتھی آپ کو یہ بتا سکیں گے کہ اسے تکنیکی نقطہ نظر سے کیسے بہتر بنایا جا سکتا ہے :)

  5. String کلاس کو غلط سمجھنا

    public class Main {
    
        public static void main(String[] args) {
    
            String s1 = "I'm learning Java";
            String s2 = new String("I'm learning Java");
    
            System.out.println(s1 == s2);
        }
    }

    اگر آپ نہیں جانتے کہ یہ کوڈ غلط کیوں دکھاتا ہے ، تو ظاہر ہے کہ آپ کو اپنے علم کو بڑھانے کی ضرورت ہے :)

    ابتدائی افراد اکثر اسٹرنگ پول اور یہ کیسے کام کرتا ہے اس سے ناواقف ہوتے ہیں۔

    نتیجے کے طور پر، وہ پوری طرح سے نہیں سمجھتے کہ اپنے کوڈ میں تاروں کا مناسب طریقے سے موازنہ کیسے کریں۔ ہم نے اپنے ایک سبق میں اس موضوع کو تفصیل سے دریافت کیا ہے ۔

  6. مستثنیات کو غلط طریقے سے ہینڈل کرنا۔

    شروعات کرنے والے صرف وہی نہیں ہیں جو اس پر ٹھوکر کھاتے ہیں۔ تجربہ کار ڈویلپر بھی پھنس جاتے ہیں۔ وجوہات بہت ہیں۔

    سب سے پہلے، کوئی عالمگیر ہدایت نہیں ہے. پروگراموں میں ہر طرح کی مختلف غلطیاں اور مختلف نقص سے نمٹنے کے منظرنامے ہوتے ہیں۔

    دوسرا، ہر کوئی نہیں سمجھتا کہ اسٹیک ٹریس کی ساخت کیسے بنتی ہے۔ اینٹی پیٹرن کو سنبھالنے میں بہت ساری خرابیاں ہیں، اور ان میں سے ہر ایک اپنے طریقے سے "غلط" ہے۔ اس کا مطلب یہ ہے کہ کسی بھی چیز کے مقابلے میں غلطی کو سنبھالنا بہت آسان ہے۔

  7. آپریٹرز (ریاضی، منطقی اور دیگر) کام کرنے کے طریقے کو پوری طرح سے نہیں سمجھ رہے ہیں۔

    دوکھیباز پروگرامرز کی 8 عام غلطیاں - 2

    یہاں ایک سادہ سی مثال ہے۔ کیا آپ فوراً بتا سکتے ہیں کہ یہ کوڈ کیا دکھائے گا؟

    public class Main {
    
        public static void main(String[] args) {
    
            int i = 6;
            System.out.println(7 == i++);
        }
    }

    اگر آپ نے غلط جواب دیا ہے یا صرف اندازہ لگایا ہے، تو پھر بھی آپ کے پاس اس علاقے میں علم کی کمی ہے :)

    کوڈ غلط ظاہر کرے گا ، کیونکہ مساوات آپریٹر ( == ) کو پوسٹ فکس انکریمنٹ آپریٹر ( ++ ) سے زیادہ ترجیح حاصل ہے۔ لہذا، 7 == i موازنہ پہلے انجام دیا جاتا ہے، اور اس کے بعد ہی i++ آپریشن کیا جاتا ہے۔

    ویسے ہم نے اس پر تفصیلی سبق بھی پڑھا تھا۔ اگر آپ نے اسے یاد کیا تو یہ لنک ہے۔

  8. سوئچ بیان میں لفظ وقفے کو چھوڑنا۔

    اس مضمون کو پڑھنے والے بہت سے لوگوں نے یقیناً یہ غلطی کی ہے! :)

    public class Main {
    
        public static void main(String[] args) {
    
            int i = 1;
    
            switch (i) {
    
                case 1: {
                    System.out.println("The number is equal to 1");
                }
                case 2: {
                    System.out.println("The number is equal to 2");
                }
                case 3: {
                    System.out.println("The number is equal to 3");
                }
            }
        }
     }

    نتیجے کے طور پر، ہر ممکنہ آپشن کے ذریعے عمل درآمد ختم ہو جاتا ہے:

    آؤٹ پٹ:

    نمبر 1 کے برابر ہے نمبر 2 کے برابر ہے نمبر 3 کے برابر ہے۔

    ایک بریک اسٹیٹمنٹ سوئچ اسٹیٹمنٹ کے عمل میں رکاوٹ ڈالتا ہے جب آپشنز میں سے کسی ایک کو عمل میں لایا جاتا ہے۔ اسے مت بھولنا ورنہ آپ کو غیر متوقع نتائج مل سکتے ہیں :)

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