CodeGym /Java Blog /Acak /8 kesalahan umum yang dilakukan oleh programmer pemula
John Squirrels
Level 41
San Francisco

8 kesalahan umum yang dilakukan oleh programmer pemula

Dipublikasikan di grup Acak
Hai! Hari ini kita akan melihat 8 kesalahan umum yang dibuat oleh pengembang Java pemula (dan lainnya). Anda akan menemukan banyak daftar seperti itu di web: banyak di antaranya mirip satu sama lain. Saat kami menyusun daftar kami, kami dipandu oleh satu kriteria: apakah kami membuat kesalahan sendiri selama studi atau pekerjaan kami :) Mereka tidak diurutkan berdasarkan kepentingan - mereka sama pentingnya untuk Anda pahami dan ingat.
  1. Membandingkan objek menggunakan == .

    Operator == membandingkan referensi objek.

    Referensi menunjuk ke alamat di memori. Jika disimpan di alamat yang berbeda, maka perbandingan menggunakan == akan menghasilkan false .

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

    Untuk membandingkan objek, kelas Object memiliki metode khusus: equals() . Terus terang, implementasi standarnya tidak buruk:

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

    Di kelas Object itu sendiri, metode equals() diimplementasikan sebagai perbandingan dua referensi. Pada gilirannya, untuk membandingkan objek dengan benar, Anda perlu mendefinisikan ulang metode ini sesuai dengan kriteria yang relevan dalam program khusus Anda untuk objek khusus Anda. Kriteria kesetaraan terserah Anda.

    Satu-satunya hal yang tidak boleh Anda lupakan adalah daftar persyaratan untuk mengesampingkan equals() dengan benar . Anda dapat dengan mudah menemukannya di Internet.

  2. Menggunakan variabel non-statis dalam metode statis (dan sebaliknya).

    Jika Anda pernah melihat pesan "Variabel non-statis x tidak dapat dirujuk dari konteks statis", selamat datang di klub :)

    Metode statis tidak memiliki akses ke variabel (instance) non-statis.

    Ini masuk akal: lagipula, metode statis dapat dipanggil tanpa membuat objek dari kelasnya, dan semua bidang adalah milik objek tertentu. Dan di sinilah letak kontradiksi yang menyebabkan kesalahan tersebut.

    Omong-omong, menggunakan cara lain berfungsi dengan baik: Anda dapat menggunakan variabel statis dalam metode non-statis:

    
    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. Kesalahpahaman bagaimana argumen diteruskan ke metode: dengan referensi atau dengan nilai.

    Objek dan primitif diteruskan ke metode dalam dua cara berbeda: pertama, dengan referensi; kedua, berdasarkan nilai.

    Pemula sering merasa sulit untuk memahami konsep ini. Akibatnya, kode mereka berperilaku tidak terduga:

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

    Jika Anda tidak tahu persis angka mana yang akan bertambah dan mana yang tidak (angka lama biasa atau usia kucing), baca kembali pelajaran kami tentang topik tersebut .

  4. Mengabaikan aturan pengkodean.

    Ini berlaku tidak hanya untuk kepatuhan terhadap prinsip-prinsip "teknis" tertentu, tetapi juga untuk konvensi penamaan biasa.

    Semua aturan ini (cara memberi nama variabel, cara menulis nama metode) diciptakan karena suatu alasan. Mereka benar-benar memengaruhi keterbacaan kode

    Lagi pula, kode itu tidak akan selalu menjadi milik Anda sendiri. Anda mungkin dipindahkan ke proyek lain di perusahaan Anda. Rekan kerja Anda yang mewarisi kode Anda jelas tidak akan senang ketika mereka melihat hal seperti ini:

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

    Kode Anda mungkin memiliki kinerja yang sangat tinggi, tetapi jika tidak mungkin untuk membaca dan memahami cara kerjanya yang sebenarnya, maka, sayangnya, itu tidak terlalu berharga.

    Jika Anda tetap berpegang pada standar pengkodean, meskipun kode Anda jauh dari ideal, setidaknya rekan kerja Anda yang lebih berpengalaman akan dapat memberi tahu Anda cara meningkatkannya dari sudut pandang teknis :)

  5. Kesalahpahaman kelas String

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

    Jika Anda tidak tahu mengapa kode ini menampilkan false , Anda jelas perlu menambah pengetahuan Anda :)

    Pemula sering tidak menyadari String Pool dan cara kerjanya.

    Akibatnya, mereka tidak sepenuhnya memahami cara membandingkan string dengan benar dalam kode mereka. Kami menjelajahi topik ini secara mendetail di salah satu pelajaran kami .

  6. Menangani pengecualian secara tidak benar.

    Pemula bukan satu-satunya yang tersandung pada ini. Pengembang berpengalaman juga tersandung. Alasannya banyak.

    Pertama, tidak ada resep universal. Program memiliki segala macam kesalahan yang berbeda dan skenario penanganan kesalahan yang berbeda.

    Kedua, tidak semua orang mengerti bagaimana stack trace disusun. Ada banyak antipattern penanganan kesalahan, dan masing-masing "salah" dengan caranya sendiri. Ini berarti jauh lebih mudah untuk mendapatkan penanganan kesalahan yang salah daripada hal lainnya.

  7. Tidak sepenuhnya memahami cara kerja operator (aritmatika, logika, dan lainnya).

    8 kesalahan umum yang dilakukan oleh programmer pemula - 2

    Ini contoh sederhana. Dapatkah Anda langsung mengetahui apa yang akan ditampilkan oleh kode ini?

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

    Jika Anda menjawab salah atau hanya menebak, maka Anda masih memiliki celah pengetahuan di bidang ini :)

    Kode akan menampilkan false , karena operator kesetaraan ( == ) memiliki prioritas lebih tinggi daripada operator peningkatan postfix ( ++ ). Oleh karena itu, perbandingan 7 == i dikeluarkan terlebih dahulu, baru kemudian operasi i++ dilakukan.

    Omong-omong, kami juga mendapat pelajaran mendetail tentang ini. Ini tautannya jika Anda melewatkannya.

  8. Menghilangkan kata break dalam pernyataan switch .

    Banyak orang yang membaca artikel ini pasti melakukan kesalahan ini! :)

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

    Akibatnya, eksekusi gagal melalui setiap opsi yang memungkinkan:

    Keluaran:

    Bilangan sama dengan 1 Bilangan sama dengan 2 Bilangan sama dengan 3

    Pernyataan break menginterupsi eksekusi pernyataan switch ketika salah satu opsi selesai dieksekusi. Jangan lupa atau Anda mungkin mendapatkan hasil yang tidak terduga :)

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION