- Pendekatan pemrograman dari kiri ke kanan menjaga program tetap dalam keadaan valid segera setelah kode diketik, sehingga dukungan alat seperti pelengkapan otomatis di editor dapat dimaksimalkan
- List comprehension Python menghambat pelengkapan otomatis karena variabel belum dideklarasikan dan tidak adanya inferensi tipe
- Rust dan JavaScript memungkinkan program disusun secara alami dari kiri ke kanan, sehingga penggunaan variabel dan penelusuran metode terasa lebih intuitif
- Gaya fungsional di C dan Python menghambat pengalaman menulis kode yang efisien karena nama fungsi atau strukturnya sulit ditemukan
- Pada logika yang kompleks, kode yang berkembang dari kiri ke kanan lebih mudah dibaca, serta lebih baik dalam pemeliharaan dan skalabilitas
Pemrograman dari Kiri ke Kanan
Kode harus valid segera saat diketik
Batasan list comprehension Python
- Sintaks list comprehension Python
words_on_lines = [line.split() for line in text.splitlines()] menimbulkan masalah karena harus mengakses variabel yang belum dideklarasikan (line), sehingga editor tidak dapat memberikan pelengkapan otomatis atau inferensi tipe dengan baik
- Dalam proses mengetik kode secara bertahap
- jika mengetik
words_on_lines = [line.sp, editor tidak mengetahui tipe line sehingga tidak bisa merekomendasikan metode
- juga lebih sulit mendeteksi potensi kesalahan seperti salah ketik nama variabel (
lime dan sebagainya)
- Untuk mendapatkan rekomendasi yang benar, pengguna harus menulis kode yang belum selesai, dan proses itu terasa tidak intuitif dan tidak nyaman
Penyusunan dari kiri ke kanan di Rust
- Contoh Rust (
let words_on_lines = text.lines().map(|line| line.split_whitespace());) menunjukkan bahwa
- bersamaan dengan deklarasi fungsi anonim, saat variabel (
line) pertama kali muncul, itu langsung dianggap sebagai deklarasi, sehingga pelengkapan otomatis dan rekomendasi metode segera tersedia
- bahkan metode
split_whitespace juga mudah ditemukan berkat rekomendasi otomatis
- Pendekatan ini membuat program selalu tetap dalam keadaan yang setidaknya valid secara parsial, sehingga IDE atau editor dapat mendukung proses menulis kode secara real-time
Progressive Disclosure dan kegunaan API
- Progressive Disclosure adalah prinsip desain yang membuat pengguna hanya menghadapi kompleksitas sesuai kebutuhan, dan ini juga bisa diterapkan pada pemrograman
- Contoh: mirip dengan UX pengolah kata yang hanya menampilkan opsi terkait saat menambahkan gambar
- Bahasa C kurang memiliki dukungan seperti ini
- karena semua fungsi yang terkait dengan
FILE *file tidak dapat dijelajahi lewat file., pengguna harus menghafal pola nama fungsi (fread, fclose, dan sebagainya), sehingga sulit menemukan fitur
- sebaliknya, dalam bahasa yang ideal, fungsi terkait bisa ditemukan secara bertahap dengan mudah melalui rekomendasi metode dari
file.
Perbedaan dalam ketercarian fungsi dan metode
- Perbandingan antara contoh Python
map(len, text.split()) dan JavaScript text.split(" ").map(word => word.length)
- di Python, nama fungsi seperti
len, length, atau size tidak selalu dapat diperkirakan, sehingga harus mencoba beberapa kemungkinan untuk mengetahui mana yang benar-benar bekerja
- di JavaScript, cukup mengetik
.l setelah word. dan editor akan menampilkan metode seperti length, sehingga ketercarian lebih tinggi
- fungsi tingkat tinggi seperti
map juga membuat nilai hasil dan tipe data yang dikembalikan langsung tampak jelas
Keunggulan penulisan terstruktur pada logika yang kompleks
- Untuk logika yang kompleks (kode Python panjang dengan
filter dan lambda yang bertumpuk)
- pengguna harus berulang kali memeriksa awal dan akhir kode, dan pencocokan kondisi maupun tanda kurung dapat menyebabkan penurunan keterbacaan serta kesulitan dalam memahami kode
- Dalam versi JavaScript dengan logika yang sama, kode dapat dibaca dan dipahami secara berurutan dari atas ke bawah dan dari kiri ke kanan
Prinsip inti
Kode harus valid pada setiap saat ketika diketik
- Bahkan saat hanya mengetik
text, program tetap berada dalam keadaan valid
- Setelah menulis
text.split(" "), lalu melanjutkannya dengan .map(word => word.length), secara keseluruhan keadaan menengahnya selalu valid
- Pola penulisan kode seperti ini meningkatkan kemungkinan dukungan real-time dari editor, dan dalam lingkungan REPL hasilnya juga bisa langsung diperiksa
Kesimpulan
- Desain API dan bahasa harus mendukung pengetikan kode secara alami dari kiri ke kanan sambil memungkinkan terbentuknya program yang valid di setiap tahap perantara
- Desain API yang baik adalah kunci untuk meningkatkan pengalaman menulis kode seperti ini
Belum ada komentar.