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);
        }
    }
    

    वस्तुओं की तुलना करने के लिए, वस्तु वर्ग की एक विशेष विधि है: बराबर () । स्पष्ट रूप से, इसका डिफ़ॉल्ट कार्यान्वयन खराब नहीं है:

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

    ऑब्जेक्ट क्लास में ही, बराबर () पद्धति को दो संदर्भों की तुलना के रूप में कार्यान्वित किया जाता है। बदले में, वस्तुओं की सही ढंग से तुलना करने के लिए, आपको इस पद्धति को उन मानदंडों के अनुसार फिर से परिभाषित करने की आवश्यकता है जो आपके विशेष कार्यक्रम में आपके विशेष वस्तुओं के लिए प्रासंगिक हैं। समानता के मानदंड आपके ऊपर हैं।

    केवल एक चीज जिसे आपको नहीं भूलना चाहिए वह है बराबर() को ठीक से ओवरराइड करने के लिए आवश्यकताओं की सूची । आप उन्हें इंटरनेट पर आसानी से पा सकते हैं।

  2. स्थैतिक तरीकों (और इसके विपरीत) में गैर-स्थैतिक चर का उपयोग करना।

    यदि आपने कभी संदेश देखा है "गैर स्थैतिक चर एक्स को स्थिर संदर्भ से संदर्भित नहीं किया जा सकता है", तो क्लब में आपका स्वागत है :)

    स्टेटिक विधियों में गैर स्थैतिक (उदाहरण) चर तक पहुंच नहीं है।

    यह समझ में आता है: आखिरकार, एक स्थिर विधि को उसकी कक्षा की वस्तु बनाए बिना कहा जा सकता है, और सभी क्षेत्र विशिष्ट वस्तुओं से संबंधित हैं। और यहाँ वह विरोधाभास है जो त्रुटि का कारण बनता है।

    वैसे, दूसरे तरीके से जाना ठीक काम करता है: आप स्थिर चर का उपयोग गैर-स्थैतिक तरीकों में कर सकते हैं:

    
    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