Tip 5 Java: Konstanta Java

Minggu ini kita membuat beberapa konstanta yang memiliki semua keuntungan menggunakan fasilitas C preprocessor untuk mendefinisikan konstanta waktu kompilasi dan kode yang dikompilasi secara bersyarat.

Java telah menyingkirkan seluruh pengertian tentang preprosesor tekstual (jika Anda menganggap Java sebagai "keturunan" dari C / C ++). Namun, kami bisa mendapatkan manfaat terbaik dari setidaknya beberapa fitur praprosesor C di Java: konstanta dan kompilasi bersyarat.

Salah satu fitur yang sangat baik dari C preprocessor adalah kemampuannya untuk mendefinisikan konstanta waktu kompilasi menggunakan nama tekstual untuk mewakili beberapa nilai. Ini membuatnya lebih mudah untuk dibaca dan dipelihara. Ini juga lebih cepat saat runtime daripada menggunakan variabel normal.

Fitur yang bisa dibilang disalahgunakan dari C preprocessor adalah penggunaan #define bersama dengan #ifdef dan friends untuk mengkompilasi seluruh blok kode secara bersyarat. Saya katakan itu bisa diperdebatkan karena orang sering menggunakan fasilitas ini untuk menangani masalah khusus platform (dan itu adalah poin baik dan buruk).

Di C, seseorang dapat mendefinisikan beberapa konstanta dalam file header melalui:

#define MY_BDATE 10 #define SILLY_PLATFORM 

dan kemudian mendapatkan akses ke konstanta tersebut dengan menggunakan #include untuk menyertakannya dalam file kode, lalu menggunakannya:

fprintf (stderr, "Ulang tahun saya tanggal% d" "th! \ n", MY_BDATE); 

Hal yang setara di Java dapat dilakukan dengan membuat variabel final statis publik di antarmuka Java :

antarmuka ConstantStuff {public static final int MY_BDATE = 10; public static final boolean SillyPlatform = true; }

Kemudian kita dapat mengaksesnya dengan menggunakan importuntuk membuat antarmuka terlihat oleh kita dan kemudian menggunakan konstanta:

System.out.println ("Ulang tahun saya ada di" + ConstantStuff.MY_BDATE + "th!"); 

Praprosesor C dapat secara kondisional menghapus area teks yang luas jika konstanta praprosesor tertentu telah atau tidak ditentukan.

#if ditentukan (SILLY_PLATFORM) / * Banyak kode buruk untuk menangani kebodohan platform * SILLY. * / #else / * Kode untuk menangani platform normal lainnya. */ #berakhir jika

Banyak orang yang mengeluhkan bahwa kemampuan ini tidak ada di Jawa. Ingat, salah satu alasan mengapa Java begitu hebat adalah karena bahasanya jauh lebih baik, jadi kode khusus sistem seperti itu seharusnya tidak diperlukan.

Bagaimanapun, Anda masih bisa mendapatkan kode yang dikompilasi secara bersyarat semacam itu dari kompilator secara langsung! Anda cukup menggunakan konstanta boolean public static final sebagai kondisi untuk pernyataan if reguler . Compiler Java cukup pintar untuk mengenalinya sebagai kasus khusus dan dapat sepenuhnya menghilangkan pengujian dan kode dari cabang bersyarat yang sesuai.

Jadi tulis saja pernyataan kondisional seperti biasa.

if (ConstantStuff.SillyPlatform) {// Kode yang akan digunakan jika platform benar * pada waktu kompilasi *. } else {// Kode yang akan digunakan jika platform salah * pada waktu kompilasi *. }

Saya tidak tahu tentang Anda, tetapi saya benci harus menulis nama antarmuka yang bertele-tele sebelum menggunakan salah satu konstanta itu. Jadi, saya hanya memiliki kelas saya yang akan menggunakan konstanta mereka menerapkan itu antarmuka . Kemudian saya dapat menggunakan nama secara langsung, dengan asumsi tidak ada bentrokan nama (dalam hal ini Anda harus membedakannya menggunakan nama lengkap).

Saya telah menggabungkan semua hal menyenangkan ini dalam beberapa aplikasi Java sederhana. Konstanta (//www.javaworld.com/javatips/javatip5/Constants.java) mengimplementasikan dengan antarmuka dan menggunakan konstanta langsung sementara Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) menggunakan nama yang memenuhi syarat untuk mengakses konstanta.

John D. Mitchell adalah lulusan Ilmu Komputer UC-Berkeley lainnya yang menyapih kafein, gula, dan terlalu sedikit tidur. Dia menghabiskan tiga tahun bekerja keras pada perangkat lunak PDA di Geoworks untuk mendapatkan saham yang sebenarnya lebih berharga daripada wallpaper. Dia menebus pekerjaannya setelah rilis publik pertama Java untuk mengembangkan applet dan kompiler Java. Dia mendanai kecanduan Java-nya dengan menulis kompiler, Tcl / Tk, Perl, C ++, dan sistem Java. Waktu luangnya yang berlebihan dihabiskan dengan memoderasi newsgroup comp.lang.tcl.announce dan menulis buku Java yang mengagumkan.

Artikel ini, "Tip Java 5: Konstanta Java", awalnya diterbitkan oleh JavaWorld.