Sebuah permainan untuk membantu memvisualisasikan efek gaya penempatan kurung kurawal di Java

Tujuannya adalah menjadi Objektif

Beberapa tahun yang lalu, saya menemukan pendekatan kreatif untuk membantu membangun dan menyetujui gaya pengkodean dengan tim baru yang saya kerjakan. Kami sedang dalam tahap awal pengkodean pada proyek baru menggunakan bahasa pemrograman Java. Saya meminta agar kami memutuskan dan menyetujui pedoman gaya kode yang konsisten sebagai sebuah tim, terlebih dahulu. Saya tahu saya perlu mengemukakan argumen yang obyektif dan kreatif untuk mengatasi salah satu perdebatan gaya kode yang kontroversial di Java - di mana menempatkan kurung kurawal.

Memilih Kreativitas daripada Konflik

Berenang melawan arus “tetapi semua orang melakukannya dengan cara ini” adalah hal yang sulit. Lebih sulit lagi ketika perusahaan pencari yang sangat dihormati memberikan stempel persetujuan mereka pada gaya pengkodean Java tertentu.

Untuk membantu saya menyajikan argumen obyektif untuk gaya penempatan kawat gigi tertentu, saya membuat permainan yang saya sebut “Hubungkan Kawat Gigi”. Saya mengambil kode dari dua contoh kelas yang saya buat dan menempelkannya di dek Powerpoint dan menggambar garis di atas kode untuk menghubungkan kurung kurawal awal dan akhir. Game ini terinspirasi dari salah satu game masa kecil favorit saya — “Connect the Dots”.

Hal hebat tentang “Hubungkan Titik-Titik” adalah peraturannya yang sederhana, dan hampir semua orang pernah memainkan permainan ini di sekolah. “Menghubungkan Kawat Gigi” juga sangat sederhana. Cukup sambungkan kurung kurawal awal dan akhir dari setiap cakupan kode dengan menggambar garis di antara keduanya. Mudah.

Saya mempresentasikan permainan tersebut kepada tim, dan setelah saya selesai, tidak ada yang menjawab “tetapi semua orang melakukannya dengan cara ini”. Hal ini menegaskan bahwa setidaknya satu tim merespons dengan baik argumen kreatif tentang gaya penempatan brace.

Mengotomatiskan permainan

Saya memberi tahu teman saya Vladimir Zakharov (Vlad) tentang permainan ini, dan bagaimana permainan ini secara efektif meredakan apa yang saya alami sebelumnya sebagai perdebatan yang memanas. Saya bertanya kepada Vlad apakah dia bisa menulis beberapa kode Java untuk memvisualisasikan permainan yang saya jelaskan kepadanya. Vlad lebih baik dalam pemrograman visual daripada saya, jadi saya tahu dia akan menyelesaikan kodenya lebih cepat daripada saya.

Vlad melakukan sesuatu yang lebih baik daripada sekadar menghubungkan kurung kurawal di file sumber. Dia juga mewarnai blok kode dengan highlight hijau. Ini memiliki manfaat tambahan yaitu menyorot spasi secara visual.

Gambar di bagian berikut ini dihasilkan menggunakan versi otomatis “Hubungkan Kawat Gigi” milik Vlad pada kode sebenarnya dari Eclipse Collections Kata.

Peringatan! Permainan dimulai!

Gambar berikut adalah grafis. Beberapa pengembang mungkin menganggapnya mengganggu. Kode sumber sebenarnya digunakan dalam pembuatan visual berikut. Gambar apa pun yang tidak dapat dilihat setelah menggulir melampaui teks ini adalah tanggung jawab orang yang menggulir, bukan penulis. Buah atau hewan peliharaan apa pun yang dirugikan selama dua putaran “Hubungkan Kawat Gigi” adalah hasil dari pilihan gaya kode, bukan pembuatnya. Pilihlah dengan bijak. Anda telah diperingatkan!

Babak Pertama: Enum Buah

Putaran Kedua: PetType Enum

Memilih Kejelasan daripada Kekacauan

Saya tahu saya mungkin baru saja mengarungi sungai yang deras penuh dengan piranha lapar sambil mengenakan celana renang yang terbuat dari steak. Saya tidak ingin meyakinkan semua orang bahwa gaya penempatan brace tertentu adalah “satu gaya yang sebenarnya”. Pasti ada gaya yang saya sukai ketika saya menulis kode, dan saya harus memperdebatkannya di setiap proyek yang saya kerjakan. Saya menemukan bahwa ketika saya menyampaikan argumen saya menggunakan permainan ini, kita dapat melakukan diskusi yang sehat tentang pentingnya estetika, ruang kosong, dan pelacakan visual untuk pemindaian dan keterbacaan kode.

Saya memilih kejelasan daripada kekacauan. Sinyal melebihi kebisingan. Saya memilih gaya di sebelah kanan.

Mengutip teman saya Vlad:

Ketika saya membaca kode, saya biasanya ingin melihat "apa", misalnya, apa tanggung jawab kelas ini, apa kontrak metode ini, apa kondisi untuk memicu cabang ini - atau "bagaimana", misalnya, bagaimana metode ini melakukan fungsinya, apa yang terjadi jika saya mengikuti cabang ini, dan seterusnya. Memisahkan apa dan bagaimana secara visual membantu saya memindai kode dan memfokuskan perhatian saya pada hal-hal penting pada saat itu.

Gaya pemformatan kurung kurawal vertikal memiliki efek alami dalam memisahkan “apa” dari “bagaimana” dengan memperkenalkan spasi antara tanda tangan (definisi kelas dan metode) dan implementasi (variabel dan kode). Kurung kurawal awal dan akhir selalu berada di lokasi horizontal yang sama, dengan variabilitas yang didasarkan secara konsisten pada kedalaman cakupan yang disarangkan (misalnya pernyataan kontrol seperti if, for, dan while). Anda berharap untuk melihat dasar berbentuk piramida dengan kawat gigi, sehingga dapat dengan aman mengabaikan keberadaannya, karena Anda tahu di mana mereka berada. Gaya ini mudah untuk diterapkan pemformatan otomatis di IDE Anda dan diterapkan dalam build CheckStyle.

Saya telah berenang melawan arus dengan menggunakan gaya pemformatan kurung kurawal ini di Java selama lebih dari 20 tahun. Kepada pengembang yang harus membaca atau bekerja di basis kode yang diformat menggunakan gaya penempatan kurung kurawal vertikal karena saya, ada yang ingin saya sampaikan.

Terima kasih kembali!

Pengecualian terhadap Aturan

Saya memilih gaya penempatan kurung kurawal yang berbeda saat membuat slide Powerpoint atau teks untuk buku dengan kode Java. Hanya di dua media cetak ini, saya hampir selalu memilih gaya yang mengutamakan lebih sedikit baris kode. Memecahkan kode di seluruh halaman tidak diinginkan. Hal ini merupakan trade-off yang dilakukan karena terbatasnya ruang vertikal yang tersedia. Batasan yang diberlakukan ini tidak ada dalam kode yang Anda baca di IDE atau di sumber bacaan browser dari VCS seperti GitHub atau GitLab tempat pengguliran vertikal berfungsi dengan baik.

Tujuh Kebiasaan Pengkodean yang Tidak Efektif dari Banyak Pemrogram

Beberapa bulan setelah saya membuat game “Hubungkan Kawat Gigi”, saya menemukan pembicaraan luar biasa dari Kevlin Henney yang menyajikan argumen bagus untuk gaya penempatan kawat gigi tertentu, di antara banyak poin hebat lainnya yang dia sampaikan dalam permainan ini. pembicaraan tentang gaya pengkodean.

Jadi oleh karena itu, apa yang baru saja saya sampaikan kepada Anda, jika Anda bertanya-tanya, ya, ada cara untuk menentukan cara yang benar untuk menyelaraskan kawat gigi Anda… secara objektif.

Tidak ada spoiler. Saya sangat merekomendasikan menonton pembicaraan ini. Peringatan, pembicaraan ini mungkin merupakan gangguan konstruktif terhadap gaya pengkodean Anda saat ini.

Ajakan Bertindak pada Gaya Kode Java

Kami meninggalkan miliaran baris kode sumber Java dalam sistem kontrol versi untuk dikelola oleh diri kita sendiri dan generasi pengembang masa depan. Gaya kode memiliki dampak langsung dan halus terhadap kejelasan dan keterbacaan. Tidak semua orang membaca kode dengan kecepatan yang sama. Mungkin ada tantangan aksesibilitas yang harus Anda diskusikan dan pertimbangkan sebagai sebuah tim. Setiap orang pada akhirnya akan dapat mengurai kode dengan membacanya baris demi baris, apa pun gayanya. Jika kita dapat menghabiskan lebih sedikit siklus untuk memisahkan apa dari bagaimana dan menemukan kode yang kita cari, itu akan menjadi hal yang baik.

Berikut adalah aturan saya untuk membangun gaya pengkodean yang dapat diterima dalam sebuah tim.

  1. Lakukan diskusi dengan tim Anda tentang pedoman gaya kode.
  2. Terapkan pedoman gaya kode yang konsisten dalam proyek Anda menggunakan aturan pemformatan otomatis yang dikodekan dan disesuaikan dalam IDE favorit Anda.
  3. Jalankan build berkelanjutan otomatis yang akan merusak penerapan gaya kode yang tidak konsisten (misalnya CheckStyle).
  4. Publikasikan pedoman gaya kode Anda di VCS proyek Anda.
  5. Miliki keberanian dan luangkan waktu untuk mengembangkan pedoman gaya kode Anda saat Anda menemukan atau mempelajari sesuatu yang baru.

Blog ini hanya berfokus pada satu aspek gaya kode — penempatan kurung kurawal. Ada banyak aspek gaya kode lain yang perlu dipertimbangkan, dan Kevlin berhasil menjelaskan beberapa di antaranya dalam ceramahnya. Saya sangat merekomendasikan menonton ceramah Kevlin, “Tujuh Kebiasaan Pengkodean yang Tidak Efektif dari Banyak Pemrogram”, yang saya tautkan di atas. Saya sarankan berdiskusi dan menyetujui sebagai sebuah tim bagaimana Anda akan menangani properti keterbacaan jangka panjang dari basis kode Anda. Jangan hanya mengadopsi gaya kode orang lain karena nyaman dan tersedia.

Jangan ragu untuk menggunakan game Connect the Braces untuk membantu memfasilitasi diskusi rasional dan obyektif tentang gaya kode, terutama yang berlaku untuk diskusi seputar gaya penempatan kurung kurawal di Java. Jika Anda menyukai gaya ini dan ingin melihat pengaturan gaya kode yang telah kami gunakan di IntelliJ IDEA untuk Eclipse Collections selama tujuh tahun terakhir, pengaturan tersebut dapat dilihat di GitHub di sini.

Menikmati!

Saya adalah pencipta dan Pengatur proyek OSS Eclipse Collections yang dikelola di Eclipse Foundation. Koleksi Eclipse terbuka untuk kontribusi.