JavaRush /جاوا بلاگ /Random-SD /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. غلط فهمي ڪيئن پيٽرولن کي طريقن ڏانهن منتقل ڪيو ويو آهي: حوالي سان يا قدر جي ذريعي.

    شيون ۽ primitives طريقن کي مختلف طريقن سان پيٽرولر جي طور تي منتقل ڪيو ويو آهي: اڳوڻو حوالن سان، بعد ۾ قدر طرفان.

    شروعات ڪندڙ اڪثر ڪري هن تصور کي سمجهڻ ڏکيو پئجي ويندا آهن، نتيجي ۾ انهن جو ڪوڊ غير متوقع طور تي عمل ڪري ٿو:

    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