JavaRush /جاوا بلاگ /Random-UR /نوسکھئیے پروگرامرز کی 8 عام غلطیاں

نوسکھئیے پروگرامرز کی 8 عام غلطیاں

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

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

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

    public class Car {
    
       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);
       }
    }

    کلاس میں اشیاء کا موازنہ کرنے کے لیے Objectایک خاص طریقہ ہے - equals()۔ اس کا پہلے سے طے شدہ نفاذ، واضح طور پر، ایسا ہے:

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

    کلاس میں ہی، Objectطریقہ کار کی منطق 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);//ошибка компиляции, так нельзя!
       }
    
       public void printX() {
    
           System.out.println(staticX);//а так можно!
       }
    }
  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. کوڈ لکھنے کے قواعد کو نظر انداز کرنا۔

    اور یہ نہ صرف بعض "تکنیکی" اصولوں کی تعمیل پر لاگو ہوتا ہے، بلکہ نام کے نام کے کنونشنز پر بھی لاگو ہوتا ہے۔

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

    Ведь code не всегда будет только твоим. Ты можешь перевестись на другой проект в компании, и он перейдет по наследству к твоим коллегам, которые будут явно не в восторге, получив в работу что-то вроде этого:

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

    Твой code может быть гениальным с точки зрения производительности, но если его невозможно прочитать и понять How он, собственно, работает, цена его, увы, невелика.

    Придерживайся стандартов написания, и твой code, даже далекий от идеала, хотя бы прочтут более опытные товарищи и подскажут, что с технической точки зрения в нем можно улучшить :)

  5. Непонимание работы класса String

    public class Main {
    
       public static void main(String[] args) {
    
           String s1 = "Я изучаю Java";
           String s2 = new String("Я изучаю Java");
    
           System.out.println(s1 == s2);
       }
    }

    Если ты не знаешь, почему этот code выводит false, знания явно нужно подтянуть:)

    Новички часто не знают что такое String Pool и How он работает.

    Как следствие, не до конца ясно, How правильно сравнивать строки в своем codeе. В одной из наших лекций мы подробно рассматривали эту тему

  6. Неправильная работа с исключениями.

    Это свойственно не только новичкам, но и опытным разработчикам. Причин несколько.

    Во-первых, универсального рецепта не существует. Ошибки в программе бывают разные, сценарии их обработки, соответственно, тоже. Во-вторых, не все понимают структуру stackTrace, а антипаттернов обработки ошибок очень много, и каждый из них «неправилен» по-своему. Так что вариантов сделать неправильно здесь намного больше, чем где бы то ни было.

    Распространенные антипаттерны приведены здесь:

  7. Неполное понимание работы операторов (арифметических, логических и других).

    نوسکھئیے پروگرامرز کی 8 عام غلطیاں - 2

    Простой пример. Сможешь сходу сказать, что выведет этот code?

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

    Если ты ответил неправильно or наугад, значит, в этой области пока есть пробелы:)

    Код выведет false, потому что приоритет у оператора сравнения == выше, чем у постфиксного инкремента ++. Поэтому сначала будет выполнено сравнение 7 == i, и только потом - операция i++.

    По этой теме, кстати, у нас тоже была подробная лекция. Вот link, если пропустил.

  8. Пропуск слова break в операторе switch.

    Эту ошибку, вероятно, допускали многие из читателей!)

    public class Main {
    
       public static void main(String[] args) {
    
           int i = 1;
    
           switch (i) {
    
               case 1: {
                   System.out.println("Число равно 1");
               }
               case 2: {
                   System.out.println("Число равно 2");
               }
               case 3: {
                   System.out.println("Число равно 3");
               }
           }
       }
    }

    В результате на них обрушивается водопад из всех возможных вариантов:

    Вывод:

    
    Число равно 1
    Число равно 2
    Число равно 3

    Оператор break прерывает работу оператора switch в момент, когда отработал один из вариантов. Не стоит о нем забывать, иначе результат может быть неожиданным :)

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