"Hai, Amigo! Hari ini saya akan memberi tahu Anda tentang gaya kode dan pentingnya gaya kode."

"Saya akan mulai dengan hal yang paling penting.  Kode Java harus mudah dibaca.  Pendekatan umum untuk kode ini adalah: kode ditulis sekali tetapi dibaca seratus kali."

"Misalkan Anda dan 10 pemrogram lainnya sedang menulis aplikasi. Anda mengerjakan aplikasi tersebut selama tiga tahun, dengan rilis antara setiap tiga bulan."

"Segitu panjangnya?"

"Ini Java, belalang mudaku!" Bagaimana dengan sistem perusahaan yang berjalan di selusin server dan ditulis oleh 100 orang selama lebih dari 6 tahun? Itu juga kadang-kadang terjadi."

"Wah."

"Pokoknya, aturan utama, persyaratan utama untuk kode adalah harus mudah dibaca oleh pengembang lain."

"Dalam bahasa pemrograman lain, orang sering bekerja sebagai tim kecil untuk tugas kecil, jadi mereka mungkin memiliki aturan utama lain, seperti 'Berhasil? Luar biasa'."

"Selama beberapa tahun, semua anggota tim Anda akan membuat beberapa perubahan pada kode yang telah Anda tulis. Dan setiap kali mereka harus memahami cara kerja kode tersebut."

"Dan kode yang tidak dapat dipahami yang bekerja dengan sempurna sulit untuk diubah.  Mereka akan membuangnya dan menulis ulang dengan cara mereka sendiri.  Jadi, tulislah kode yang dapat dipahami orang lain.  Jika Anda dapat meningkatkan kode Anda, maka tingkatkan. Jika dapat ditingkatkan, maka perlu diperbaiki!

"Jika Anda menulis kode selama 15 menit dan kemudian menghabiskan dua jam untuk memperbaikinya, Anda melakukannya dengan benar. Berapa banyak waktu yang Anda hemat untuk tim?"

"'2 jam untuk memahami kode Anda' x '100 kali orang perlu memahaminya' = 200 jam."

"Saya mengeluarkan angka-angka ini begitu saja, tetapi saya ingin Anda memahami masalah dan ruang lingkupnya.  Kode Anda dibuat untuk dibaca oleh pemrogram lain.  Yang lainnya bersifat sekunder."

"Apakah kodenya tidak berfungsi dengan benar? Kami akan memperbaikinya. Tidak dioptimalkan? Kami akan mengoptimalkannya. Tidak didokumentasikan? Kami akan menambahkan komentar."

" Apakah kodenya sulit dibaca? Buang omong kosong itu ke tempat sampah dan tulis semuanya lagi dari awal! "

"Aku tidak berpikir itu masalah besar."

"Salah satu alasan Java menjadi bahasa pemrograman terkemuka adalah karena semua kode Java ditulis untuk dibaca oleh pemrogram lain."

"Sekarang mari beralih ke pertanyaan kedua: bagaimana Anda membuat kode Anda semudah mungkin dibaca? "

"Siapa pun dapat memahami ketika seseorang mengucapkan kata-kata yang familiar dalam bahasa aslinya. Hal yang sama berlaku di sini. Kode mudah dibaca ketika seorang programmer dapat dengan mudah menebak:

A)  Apa yang dilakukan masing-masing metode

B)  Tujuan dari masing-masing kelas

C)  Tepatnya apa yang disimpan oleh masing-masing variabel.

Semua ini dikomunikasikan dalam nama: nama kelas, nama metode, dan nama variabel. Selain itu, ada gaya dalam penamaan variabel. Dan ada gaya kode."

"Aku siap mendengarkan."

" Pemrograman didasarkan pada bahasa Inggris yang baik!  Program yang ditulis dengan baik berbunyi seperti dokumentasi teknis biasa. "

" Mari kita mulai dengan nama. "

"Nama metode harus menjelaskan secara singkat apa yang dilakukan metode tersebut. Kemudian kode tersebut dapat dibaca seperti prosa sederhana."

Program
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

"Begini cara membaca program semacam itu."

Baris 1.

"Metode ini disebut 'unduh Foto'. Tampaknya mengunduh file foto dari Internet. Di mana mengunduhnya? Kami belum tahu. Dari mana? Metode ini memiliki parameter bernama url — itu mungkin URL untuk unduhan."

Baris 3.

"Variabel resultFileName dideklarasikan dan diberi nilai oleh TempHelper.createTempFileName();"

Jadi ini pasti jalur lokal ke file tempat kita akan menyimpan file unduhan kita.

"Nama 'TempHelper' tidak memberi tahu kita apa-apa. Akhiran 'Helper' mengatakan bahwa ini adalah sejenis kelas utilitas yang tidak mengandung logika bisnis penting, melainkan digunakan untuk menyederhanakan tugas rutin yang sering terjadi."

"Nama metode 'createTempFileName' menunjukkan bahwa metode ini membuat dan mengembalikan nama file sementara (file temp). File temp adalah file sementara yang dibuat untuk sementara dan kemudian biasanya dihapus pada saat program ditutup. "

Baris 5.

"Objek SingleFileDownloader dibuat dan ditugaskan ke pengunduh variabel."

Ini adalah objek yang akan mengunduh file kita dari Internet.

"Objek SingleFileDownloader ditugaskan ke pengunduh variabel. Dari namanya, kita dapat berasumsi bahwa program ini memiliki beberapa jenis kelas pengunduh. Satu ditulis untuk mengunduh file tunggal, dan kita mungkin dapat berharap untuk menemukan pengunduh lain dalam kode untuk grup file dengan nama seperti: MultiFileDownloader, FileGroupDownloader, atau DirectoryDownloader"

Baris 6.

"Kami menyetel properti resultFileName objek pengunduh sama dengan nilai variabel resultFileName. Dengan kata lain, kami memberi tahu loader tempat menyimpan file yang diunduh. Seperti yang Anda harapkan. Jadi, pada dasarnya kami memprediksi kodenya!"

Baris 7.

"Kami menyebutnya metode mulai. Pengunduhan dimulai. Itu masuk akal. Saya ingin tahu bagaimana pengunduhan terjadi: sebagian, di utas terpisah, atau semuanya di sini? Jika kami mengunduh semuanya di sini, mungkin diperlukan waktu lama dan memiliki konsekuensi."

Baris 8-11.

"Ah. Di sini kita melihat loop standar yang ditulis oleh seseorang yang menunggu unduhan selesai. Objek downloder memiliki properti done, yang dikembalikan oleh metode isDone(). Karena metode ini disebut isDone(), bukan getDone( ), kami menyimpulkan bahwa variabel done adalah boolean atau mungkin Boolean."

Baris 13-14.

"Jika terjadi kesalahan selama pengunduhan, maka metode downloadPhoto mengembalikan nol. Ada baiknya menangani kesalahan. Buruknya hanya mengembalikan nol—tidak jelas apa kesalahannya. Akan lebih baik membuang pengecualian dengan informasi tentang kesalahan."

Baris 16.

"Kami mengembalikan jalur ke file lokal yang berisi file yang diunduh."

"Wah!"

"Kode program ini membuatnya sangat jelas apa fungsinya. Anda bahkan dapat menebak tentang bagaimana program diatur dan kelas/metode lain apa yang akan kami temukan."

"Sekarang aku mengerti betapa pentingnya nama."

"Lebih banyak tentang nama. Anda sering dapat menebak metode mana yang dimiliki objek/kelas. Misalnya, jika objek adalah koleksi, kemungkinan besar objek tersebut memiliki metode size() atau count() untuk mendapatkan jumlah elemen. Juga , mungkin akan memiliki metode add() atau insert(). Elemen diambil dari kelas koleksi menggunakan metode get/getItem/getElement."

"Jika sebuah variabel disebut i, j, atau k, maka kemungkinan besar itu adalah penghitung loop."

"Jika suatu variabel disebut m atau n, kemungkinan besar itu adalah ukuran array/koleksi."

"Jika sebuah variabel disebut nama, kemungkinan besar itu adalah sebuah String yang berisi nama seseorang."

"Jika suatu kelas disebut FileInputStream, maka itu adalah file dan aliran input secara bersamaan."

"Semakin banyak kode yang Anda lihat, semakin mudah membaca kode orang lain."

"Tapi terkadang ada kode yang sangat sulit dibaca. Dalam hal ini, inilah saran yang sangat praktis:"

Tip
Tulis kode seolah-olah akan dikelola oleh seorang psikopat kejam yang tahu di mana Anda tinggal .

"Itu lucu dan tidak lucu pada saat bersamaan."

"Sekarang sedikit tentang gaya yang digunakan untuk memberi nama variabel."

"Pengembang Java mencoba memberikan nama yang sangat informatif untuk variabel dan metode. Akibatnya, nama seringkali terdiri dari beberapa kata. Ada 4 gaya kapitalisasi nama majemuk."

1) Huruf kecil  – Semua kata ditulis dengan huruf kecil. Misalnya:

'Rumah kaca'  menjadi 'rumah kaca'

'Gadis Hollywood'  menjadi  'gadis hollywood'

Gaya ini digunakan untuk nama paket.

2) Huruf besar  – Semua kata ditulis dengan huruf besar dan dipisahkan dengan garis bawah. Misalnya:

'Nilai maks'  menjadi MAX_VALUE

'Jumlah kucing'  menjadi CAT_COUNT

"Gaya ini digunakan untuk nama konstanta (bidang statis akhir)."

3) CamelCase  – Semua kata ditulis dengan huruf kecil, kecuali huruf pertama dari setiap kata adalah huruf besar. Misalnya:

'Rumah kaca'  menjadi  'Rumah Kaca'

'Gadis Hollywood'  menjadi 'Gadis Hollywood'

Style ini digunakan untuk nama class dan interface.

4) Huruf Kecil CamelCase (huruf campuran)  – Semua kata ditulis menggunakan huruf kecil, kecuali huruf pertama dari setiap kata kecuali yang pertama adalah huruf besar. Misalnya:

'Dapatkan lebar' menjadi 'getWidth'

'Dapatkan nama gadis Hollywood' menjadi  'getHollywoodGirlName'

"Gaya ini digunakan untuk nama variabel dan metode."

"Jadi, tidak ada terlalu banyak aturan."

1)  Semuanya ditulis dalam Huruf Camel Bawah.

2)  Nama kelas dan antarmuka selalu dikapitalisasi.

3)  Nama paket selalu huruf kecil.

4)  Konstanta selalu huruf besar.

"Ada beberapa nuansa, tapi secara umum memang begitu."

"Sekarang tentang metode.  "Nama metode hampir selalu dimulai dengan kata kerja! 'menghitung' adalah nama yang buruk untuk suatu metode. Lebih baik menyebutnya getCount(). Metode melakukan beberapa tindakan pada objek:  startDownload , interrupt  , sleep  , loadPirateMusic ."

"Seperti yang sudah Anda ketahui, ada getter dan setter untuk bekerja dengan properti/bidang objek:  getName / setName , getCount / setCount , dll."

"Satu-satunya pengecualian adalah untuk boolean. Untuk boolean, nama getter menggunakan 'is', bukan 'get', misalnya isDone, isEmpty. Dengan cara ini lebih mirip dengan ucapan biasa."

"Bagaimana kalau bekerja selama dua jam sehari, bukan 8? Tergoda?"

"Ya!"

"Seharusnya. Untuk Java developer junior, persyaratan dasarnya adalah pemahaman yang sangat baik tentang dasar-dasar Java, yaitu Java Core."

"Saya punya pertanyaan lain. Mengapa kita memiliki metode yang berbeda untuk mendapatkan jumlah elemen?"

Kelas Metode/properti untuk mendapatkan jumlah elemen
Rangkaian panjang ()
Himpunan panjang
ArrayList ukuran ()
ThreadGroup Hitung aktif ()

"Pertama-tama, Java ditemukan lebih dari 20 tahun yang lalu, sebelum persyaratan seperti setCount / getCount dibuat, dan ada pendekatan umum yang diambil dari bahasa C untuk 'membuatnya sesingkat mungkin'."

"Kedua, semantik berperan di sini. Saat berbicara tentang larik, kita berbicara tentang panjangnya. Saat berbicara tentang kumpulan, kita berbicara tentang ukurannya."

"Pelajaran yang menarik."

"Aku ingin memberitahumu lebih banyak, tapi aku khawatir kamu tidak akan mengingatnya sekaligus. Lebih baik menyajikannya untukmu dalam porsi kecil."

"Tapi saya ingin menyentuh gaya mengenai penggunaan tanda kurung kurawal: {}. Ada dua pendekatan:"

1)  Braket selalu menggunakan baris baru

2)  Tanda kurung buka di akhir baris sebelumnya, sedangkan tanda kurung tutup di baris baru. Gaya ini disebut 'kawat gigi Mesir'.

"Sejujurnya, Anda bisa memilih cara membuat kode. Banyak orang menggunakan penjepit pembuka pada baris yang sama. Banyak orang meletakkannya di baris baru. Ini seperti perdebatan tentang ujung telur mana yang harus dipecahkan: ujung kecil atau ujung besar akhir."

"Satu-satunya hal yang dapat saya rekomendasikan adalah tetap berpegang pada gaya apa pun yang digunakan dalam proyek yang Anda kerjakan. Jangan mengubah kode orang lain agar sesuai dengan gaya pilihan Anda.  Orang tidak sempurna. Saya memberi tahu Anda ini sebagai Dokter Bilaabo. "

"Terima kasih untuk pelajaran yang menarik, Bilaabo. Saya akan merenungkan apa yang Anda katakan."