1. Gula sintaksis
Pengaturcara suka apabila beberapa kod atau logik kompleks boleh ditulis dalam beberapa baris, menjadikan kod padat dan boleh dibaca. Dan pencipta bahasa pengaturcaraan kadangkala membantu dengan ini.
Ciri bahasa licik yang membolehkan anda mengambil pintasan (tulis kod kurang) dipanggil gula sintaksis . Tetapi, sejujurnya, terdapat sangat sedikit di Jawa.
Pencipta Java melakukan segala yang mereka mampu untuk menghapuskan sebarang lebihan di Jawa. Jika C++ membenarkan anda melakukan sesuatu 20 cara, maka Java membenarkan anda melakukannya hanya dengan satu cara.
Tetapi pengaturcara Java mahupun pencipta Java tidak menyukai kekurangan kebebasan. Dan kadangkala gula menjadikan hidup lebih mudah untuk orang biasa seperti anda dan saya.
Ngomong-ngomong, anda telah menemui beberapa gula sintaksis: autoboxing dan unboxing . Mari bandingkan:
Kod panjang | Kod padat |
---|---|
|
|
|
|
|
|
Daripada kod panjang seperti di sebelah kiri, anda boleh menulis kod yang lebih padat di sebelah kanan. Dan pengkompil Java pintar akan menjana versi kod bertele-tele berdasarkan versi pendek kod. Inilah sebenarnya gula sintaksis.
2. Inferens jenis pembolehubah: var
kata kunci
Dalam Java 11, pengkompil menjadi lebih bijak dan kini boleh menentukan jenis pembolehubah yang diisytiharkan berdasarkan jenis nilai yang diberikan kepadanya . Dalam kod, ia kelihatan seperti ini:
var name = value;
Di manakah name
nama pembolehubah baharu, nilai ialah nilai awalnya dan var
merupakan kata kunci yang digunakan untuk mengisytiharkan pembolehubah. Jenis pembolehubah nama akan sama dengan jenis nilai yang diberikan kepadanya.
Contoh:
Bagaimana kita melihat kod itu | Apa yang dilihat oleh pengkompil |
---|---|
|
|
|
|
|
|
|
|
|
|
Pengkompil sendiri menentukan, atau membuat kesimpulan, jenis pembolehubah berdasarkan nilai yang diberikan kepadanya.
Pengaturcara berdebat hangat sama ada untuk menambah ciri sedemikian pada bahasa. Ramai orang bimbang ia var
akan disalahgunakan dan kebolehbacaan kod akan terjejas akibatnya.
Terdapat butiran kebenaran untuk ini, jadi sebaiknya gunakan var
di mana ia meningkatkan kebolehbacaan kod. Sebagai contoh, ini dalam dua kes:
Kes 1: Melihat pada nilai yang diberikan kepada pembolehubah, jenis pembolehubah jelas serta-merta
Kod | Penjelasan |
---|---|
|
Pembolehubah ialah aInputStream |
|
Pembolehubah ialah aString |
Dalam kes ini, anda tidak sepatutnya menggunakan var
. Nah, apakah jenis pembolehubah itu?
Kod | Penjelasan |
---|---|
|
Sukar untuk menentukan jenis pembolehubah |
|
Sukar untuk menentukan jenis pembolehubah |
Kes 2: Jenis pembolehubah tidak penting untuk memahami kod
Kod selalunya tidak perlu memanggil kaedah pada pembolehubah, contohnya apabila pembolehubah hanya digunakan untuk menyimpan sesuatu buat sementara waktu. Dalam kes ini, penggunaan var
pasti tidak mengurangkan kebolehbacaan kod:
Kod panjang | Kod padat |
---|---|
|
Kami mendapat metadata daripada stream aliran dan menyimpannya dalam storage repositori. Jenis khusus pembolehubah data tidak penting. |
Maksud emas
Sekarang saya akan memberikan tiga cara untuk menulis kod yang sama. Menggunakan var
akan menjadi pilihan terbaik.
Kod | Catatan |
---|---|
|
Terlalu padat |
|
Tepat sekali |
|
Terlalu terperinci |
Bergerak daripada versi dengan 1 baris ke versi pada 2 baris, kami menjadikan kod itu lebih mudah dibaca dengan menggunakan nama pembolehubah ( headerInfo
). Kini jelas bahawa kaedah itu tidak hanya mengembalikan maklumat meta, tetapi maklumat pengepala.
Versi ketiga terlalu bertele-tele. Hakikat bahawa headerInfo
adalah FileMetaInfo
sudah agak jelas daripada getFileMetaInfo()
kaedah. Tujuan maklumat meta adalah lebih menarik.
3. Mengeluarkan jenis dengan pengendali berlian:<>
Malah sebelum var
pengendali muncul, terdapat percubaan untuk mengajar pengkompil cara membuat kesimpulan jenis koleksi. Anda akan bersetuju bahawa notasi ini kelihatan sedikit berlebihan:
ArrayList<String> list = new ArrayList<String>();
Bermula dari versi Java ketujuh, apabila menulis jenis koleksi, anda boleh meninggalkan jenis elemen koleksi jika ia dinyatakan semasa mengisytiharkan pembolehubah. Dengan kata lain, kod di atas boleh ditulis dalam bentuk yang ringkas:
ArrayList<String> list = new ArrayList<>();
Seperti yang anda lihat, anda tidak perlu lagi menulis String untuk kali kedua. Tidak sehebat pengendali var, tetapi ia kelihatan seperti kemajuan pada masa itu.
Tanda kurung sudut kosong dalam jenis koleksi dipanggil pengendali berlian , kerana dua kurungan sudut samar-samar menyerupai berlian.
Adalah tidak diingini untuk menggunakan var
kata kunci dan pengendali berlian pada masa yang sama :
var list = new ArrayList<>();
Tiada maklumat sama sekali tentang jenis elemen yang disimpan dalam koleksi, dan jenis koleksi ialah ArrayList < Object >.
4. Pendakap kerinting berganda
Ingat inisialisasi tatasusunan pantas?
Kami hanya menyenaraikan nilai dalam pendakap kerinting, seperti ini:
Contoh |
---|
|
|
Pencipta Java menyukai idea menggunakan pendakap kerinting untuk memudahkan elemen penulisan tatasusunan. Tetapi bagaimana dengan koleksi?
Pencipta Java mempunyai pemikiran kreatif yang mencukupi untuk koleksi juga, membolehkan mereka menggunakan helah dengan pendakap kerinting berganda.
Dengan gula | Tanpa gula |
---|---|
|
|
Jika pengkompil menemui kod seperti dalam contoh di sebelah kiri, maka ia menukarnya kepada kod di sebelah kanan.
Kod tidak menjadi lebih padat. Penjimatan di sini agak kecil: anda tidak perlu menulis list
setiap masa. Ini boleh membantu jika nama pembolehubah sangat panjang.
Tetapi jika anda terjumpa kod seperti ini dalam projek, jangan terkejut 🙂
GO TO FULL VERSION