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

    ऑब्जेक्ट क्लासमध्येच, 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. स्ट्रिंग वर्गाचा गैरसमज

    
    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