Belajar tanpa berpikir berarti kehilangan tenaga; berpikir tanpa belajar itu berbahaya.
Ninja pemrogram di masa lalu menggunakan trik ini untuk mempertajam pikiran pengelola kode.
Pakar peninjau kode mencarinya dalam tugas pengujian.
Pengembang pemula terkadang menggunakannya lebih baik daripada ninja programmer.
Bacalah dengan cermat dan cari tahu siapa Anda – seorang ninja, pemula, atau mungkin peninjau kode?
Ironi terdeteksi
Banyak yang mencoba mengikuti jalur ninja. Hanya sedikit yang berhasil.
Buatlah kode sesingkat mungkin. Tunjukkan betapa pintarnya Anda.
Biarkan fitur bahasa halus memandu Anda.
Misalnya, lihat operator ternary '?'
:
// diambil dari perpustakaan javascript terkenal aku = aku? saya < 0 ? Math.max(0, len + i) : i : 0;
Keren, bukan? Jika Anda menulis seperti itu, seorang pengembang yang menemukan baris ini dan mencoba memahami apa nilai i
akan bersenang-senang. Kemudian datang kepadamu, mencari jawaban.
Beri tahu mereka bahwa lebih pendek selalu lebih baik. Inisiasi mereka ke jalur ninja.
Dao bersembunyi dalam ketiadaan kata-kata. Hanya Dao yang dimulai dengan baik dan diselesaikan dengan baik.
Cara lain untuk membuat kode lebih pendek adalah dengan menggunakan nama variabel satu huruf di mana saja. Seperti a
, b
atau c
.
Variabel pendek menghilang dalam kode seperti ninja sungguhan di hutan. Tidak seorang pun akan dapat menemukannya menggunakan “pencarian” editor. Dan bahkan jika seseorang mengetahuinya, mereka tidak akan dapat “menguraikan” apa arti nama a
atau b
.
…Tapi ada pengecualian. Seorang ninja sejati tidak akan pernah menggunakan i
sebagai penghitung dalam perulangan "for"
. Dimana saja, tapi tidak di sini. Lihatlah ke sekeliling, masih banyak lagi huruf-huruf eksotik. Misalnya, x
atau y
.
Variabel eksotik sebagai penghitung perulangan sangat keren jika badan perulangan membutuhkan 1-2 halaman (buat lebih panjang jika Anda bisa). Kemudian jika seseorang melihat jauh ke dalam loop, mereka tidak akan dapat dengan cepat mengetahui bahwa variabel bernama x
adalah penghitung loop.
Jika peraturan tim melarang penggunaan satu huruf dan nama yang tidak jelas – persingkat, buat singkatan.
Seperti ini:
list
→ lst
.
userAgent
→ ua
.
browser
→ brsr
.
…dll
Hanya orang yang memiliki intuisi yang benar-benar baik yang dapat memahami nama-nama tersebut. Cobalah untuk mempersingkat semuanya. Hanya orang yang layak yang dapat mendukung pengembangan kode Anda.
Alun-alun besar itu tidak bersudut
Kapal besar itu terakhir selesai dibangun,
Nada yang hebat adalah suara yang dijernihkan,
Patung besar itu tidak mempunyai bentuk.
Saat memilih nama, usahakan menggunakan kata yang paling abstrak. Seperti obj
, data
, value
, item
, elem
dan sebagainya.
Nama ideal untuk suatu variabel adalah data
. Gunakan di mana pun Anda bisa. Memang setiap variabel menyimpan data , bukan?
…Tetapi apa yang harus dilakukan jika data
sudah diambil? Coba value
, itu juga universal. Bagaimanapun, suatu variabel pada akhirnya mendapat nilai .
Beri nama variabel berdasarkan tipenya: str
, num
…
Cobalah. Seorang inisiat muda mungkin bertanya-tanya – apakah nama seperti itu benar-benar berguna bagi seorang ninja? Memang benar!
Tentu, nama variabel masih memiliki arti. Ia menyatakan apa yang ada di dalam variabel: string, angka, atau yang lainnya. Namun ketika orang luar mencoba memahami kode tersebut, mereka akan terkejut melihat bahwa sebenarnya tidak ada informasi sama sekali! Dan pada akhirnya akan gagal mengubah kode Anda yang sudah dipikirkan dengan matang.
Tipe nilai mudah diketahui dengan melakukan debug. Tapi apa arti dari variabel? String/nomor mana yang disimpannya?
Tidak ada cara untuk mengetahuinya tanpa meditasi yang baik!
…Tetapi bagaimana jika tidak ada lagi nama seperti itu? Cukup tambahkan nomor: data1, item2, elem5
…
Hanya programmer yang benar-benar penuh perhatian yang dapat memahami kode Anda. Tapi bagaimana cara memeriksanya?
Salah satu caranya – gunakan nama variabel yang mirip, seperti date
dan data
.
Campurkan sedapat mungkin.
Pembacaan cepat kode tersebut menjadi tidak mungkin. Dan kalau ada salah ketik… Ummm… Kita terjebak lama, waktunya minum teh.
Tao yang bisa diceritakan bukanlah Tao yang abadi. Nama yang dapat disebutkan bukanlah nama yang kekal.
Menggunakan nama yang mirip untuk hal yang sama membuat hidup lebih menarik dan menunjukkan kreativitas Anda kepada publik.
Misalnya, pertimbangkan awalan fungsi. Jika suatu fungsi menampilkan pesan di layar – mulailah dengan display…
, seperti displayMessage
. Dan kemudian jika fungsi lain menampilkan sesuatu yang lain di layar, seperti nama pengguna, mulailah dengan show…
(seperti showName
).
Menyindir bahwa ada perbedaan halus antara fungsi-fungsi tersebut, padahal sebenarnya tidak ada.
Buat perjanjian dengan sesama ninja dalam tim: jika John mulai "menampilkan" fungsi dengan display...
dalam kodenya, maka Peter dapat menggunakan render..
, dan Ann – paint...
. Perhatikan betapa menarik dan beragamnya kode tersebut.
…Dan sekarang hattricknya!
Untuk dua fungsi dengan perbedaan penting – gunakan awalan yang sama!
Misalnya, fungsi printPage(page)
akan menggunakan printer. Dan fungsinya printText(text)
akan menampilkan teks di layar. Biarkan pembaca yang belum familiar memikirkan dengan baik fungsi bernama printMessage
: “Di mana ia meletakkan pesannya? Ke printer atau di layar?”. Untuk membuatnya benar-benar bersinar, printMessage(message)
harus menampilkannya di jendela baru!
Setelah keseluruhannya terbagi, maka bagian-bagiannya
membutuhkan nama.
Namanya sudah cukup banyak.
Seseorang harus tahu kapan harus berhenti.
Tambahkan variabel baru hanya jika benar-benar diperlukan.
Sebaliknya, gunakan kembali nama yang sudah ada. Tulis saja nilai-nilai baru ke dalamnya.
Dalam suatu fungsi, coba gunakan hanya variabel yang diteruskan sebagai parameter.
Itu akan membuat sangat sulit untuk mengidentifikasi apa yang sebenarnya ada dalam variabel sekarang . Dan juga dari mana asalnya. Tujuannya adalah untuk mengembangkan intuisi dan memori seseorang yang membaca kode tersebut. Seseorang dengan intuisi yang lemah harus menganalisis kode baris demi baris dan melacak perubahan di setiap cabang kode.
Varian lanjutan dari pendekatan ini adalah dengan diam-diam (!) mengganti nilai dengan sesuatu yang serupa di tengah-tengah perulangan atau fungsi.
Misalnya:
fungsi ninjaFungsi(elemen) { // 20 baris kode bekerja dengan elem elemen = klon(elemen); // 20 baris lagi, sekarang bekerja dengan tiruan dari elemen tersebut! }
Rekan pemrogram yang ingin bekerja dengan elem
di paruh kedua fungsi akan terkejut… Hanya selama proses debug, setelah memeriksa kode, mereka akan mengetahui bahwa mereka bekerja dengan klon!
Terlihat dalam kode secara teratur. Sangat efektif bahkan melawan ninja berpengalaman.
Letakkan garis bawah _
dan __
sebelum nama variabel. Seperti _name
atau __value
. Alangkah baiknya jika Anda tahu artinya. Atau, lebih baik, menambahkannya hanya untuk bersenang-senang, tanpa arti khusus sama sekali. Atau arti berbeda di tempat berbeda.
Anda membunuh dua kelinci dengan satu tembakan. Pertama, kode menjadi lebih panjang dan sulit dibaca, dan kedua, rekan pengembang mungkin menghabiskan waktu lama untuk mencari tahu apa arti garis bawah.
Seorang ninja yang cerdas menempatkan garis bawah di satu titik kode dan menghindarinya di tempat lain. Hal ini membuat kode menjadi lebih rapuh dan meningkatkan kemungkinan kesalahan di masa depan.
Biarkan semua orang melihat betapa hebatnya entitas Anda! Nama-nama seperti superElement
, megaFrame
dan niceItem
pasti akan mencerahkan pembaca.
Memang dari satu sisi ada yang tertulis: super..
, mega..
, nice..
Tapi di sisi lain – tidak ada detailnya. Seorang pembaca mungkin memutuskan untuk mencari makna tersembunyi dan bermeditasi selama satu atau dua jam dari waktu kerja berbayarnya.
Saat berada di terang, tidak bisa melihat apa pun di kegelapan.
Saat berada dalam kegelapan, bisa melihat segala sesuatu dalam terang.
Gunakan nama yang sama untuk variabel di dalam dan di luar suatu fungsi. Sesederhana itu. Tidak ada upaya untuk menciptakan nama baru.
biarkan pengguna = authenticateUser(); fungsi render() { biarkan pengguna = anotherValue(); ... ...banyak baris... ... ... // <-- seorang programmer ingin bekerja dengan pengguna di sini dan... ... }
Seorang programmer yang masuk ke dalam render
mungkin tidak akan menyadari bahwa ada user
lokal yang membayangi bagian luar.
Kemudian mereka akan mencoba bekerja dengan user
dengan asumsi bahwa itu adalah variabel eksternal, hasil dari authenticateUser()
… Jebakan bermunculan! Halo, debugger…
Ada fungsi yang sepertinya tidak mengubah apa pun. Seperti isReady()
, checkPermission()
, findTags()
… Mereka diasumsikan melakukan penghitungan, menemukan dan mengembalikan data, tanpa mengubah apa pun di luarnya. Dengan kata lain, tanpa “efek samping”.
Trik yang sangat bagus adalah menambahkan tindakan yang "berguna" ke dalamnya, selain tugas utama.
Ekspresi keterkejutan di wajah kolega Anda ketika mereka melihat fungsi bernama is..
, check..
or find...
changing sesuatu – pasti akan memperluas batasan alasan Anda.
Cara lain untuk memberikan kejutan adalah dengan mengembalikan hasil yang tidak standar.
Tunjukkan pemikiran orisinal Anda! Biarkan panggilan checkPermission
tidak mengembalikan true/false
, tetapi objek kompleks dengan hasil pemeriksaan.
Pengembang yang mencoba menulis if (checkPermission(..))
, akan bertanya-tanya mengapa itu tidak berhasil. Beri tahu mereka: “Baca dokumennya!”. Dan berikan artikel ini.
Tao yang agung mengalir kemana-mana,
baik ke kiri maupun ke kanan.
Jangan batasi fungsinya hanya dengan apa yang tertulis di namanya. Menjadi lebih luas.
Misalnya, fungsi validateEmail(email)
dapat (selain memeriksa kebenaran email) menampilkan pesan kesalahan dan meminta untuk memasukkan kembali email.
Tindakan tambahan tidak boleh terlihat jelas dari nama fungsinya. Pembuat kode ninja sejati juga akan membuatnya tidak terlihat jelas dari kodenya.
Menggabungkan beberapa tindakan menjadi satu akan melindungi kode Anda agar tidak digunakan kembali.
Bayangkan, pengembang lain hanya ingin memeriksa email, dan tidak menampilkan pesan apa pun. Fungsi Anda validateEmail(email)
yang melakukan keduanya tidak akan cocok untuk mereka. Jadi mereka tidak akan menghentikan meditasi Anda dengan menanyakan apa pun tentangnya.
Semua “nasihat” di atas berasal dari kode asli… Terkadang, ditulis oleh pengembang berpengalaman. Mungkin bahkan lebih berpengalaman dari Anda;)
Ikuti beberapa di antaranya, dan kode Anda akan penuh kejutan.
Ikuti banyak dari mereka, dan kode Anda akan menjadi milik Anda sepenuhnya, tidak ada yang mau mengubahnya.
Ikuti semuanya, dan kode Anda akan menjadi pelajaran berharga bagi pengembang muda yang mencari pencerahan.