CodeGym /Java Blog /এলোমেলো /রুকি প্রোগ্রামারদের দ্বারা করা 8টি সাধারণ ভুল
John Squirrels
লেভেল 41
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);
    }
    

    অবজেক্ট ক্লাসেই , সমান() পদ্ধতি দুটি রেফারেন্সের তুলনা হিসাবে প্রয়োগ করা হয়। পরিবর্তে, সঠিকভাবে বস্তুর তুলনা করার জন্য, আপনার নির্দিষ্ট বস্তুর জন্য আপনার নির্দিষ্ট প্রোগ্রামে প্রাসঙ্গিক মানদণ্ড অনুসারে আপনাকে এই পদ্ধতিটি পুনরায় সংজ্ঞায়িত করতে হবে। সমতার মানদণ্ড আপনার উপর নির্ভর করে।

    সঠিকভাবে সমান() ওভাররাইড করার প্রয়োজনীয়তার তালিকাটি আপনাকে ভুলে যাওয়া উচিত নয় । আপনি সহজেই ইন্টারনেটে তাদের খুঁজে পেতে পারেন।

  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. স্ট্রিং ক্লাস ভুল বোঝার

    
    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